Wenn ich meine App starte, wird eine Abfrage an die Datenbank über die AsyncTask-Klasse gesendet. Während die App Daten erhält, habe ich einen weißen Bildschirm und wenn die Kommunikation mit db abgeschlossen ist, wird eine Karte mit allen vom Server erhaltenen Markierungen angezeigt. Ich frage mich, ob es eine Möglichkeit gibt, einen Begrüßungsbildschirm mit onProgressUpdate anzuzeigen. Oder wenn es einen besseren Weg gibt, einen Begrüßungsbildschirm anzuzeigen. Das Bild, das ich wähle, ist eine JPEG-Datei.Begrüßungsbildschirm bei AsyncTask & Maps
Antwort
OnLocationChanged ich die AsyncTask nennen:
AsyncTaskRunner run = new AsyncTaskRunner();
run.execute (lat, lng);
so dass der Code des AsyncTask:
class AsyncTaskRunner extends AsyncTask<Double, Void, List<Map<String, Double>>> {
@Override
protected List<Map<String, Double>> doInBackground(Double... coords) {
try {
URL url = new URL(....);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
JSONObject jsonObject = new JSONObject(inputLine);
String code = jsonObject.getString("code");
Log.i("FontaneDB", code);
JSONArray data = jsonObject.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject fontana = data.getJSONObject(i);
//Iterate through the elements of the array i
Map<String, Double> font = new HashMap<String, Double>();
font.put("latitudine", Double.parseDouble(fontana.getString("latitudine")));
font.put("longitudine", Double.parseDouble(fontana.getString("longitudine")));
result.add(font);
}
}
in.close();
}
catch (Exception e) {
Log.e("FontaneDB", e.toString());
}
return result;
}
@Override
protected void onPostExecute(List<Map<String, Double>> maps) {
int distance, contatore = 1;
Location loc = new Location(LocationManager.NETWORK_PROVIDER);
if (maps.isEmpty()) {
Toast.makeText(context, "Non ci sono fontane nelle vicinanze", Toast.LENGTH_LONG).show();
}
else {
for (Map<String, Double> fontana : maps) {
loc.setLatitude(fontana.get("latitudine"));
loc.setLongitude(fontana.get("longitudine"));
distance = Math.round(mCurrentLocation.distanceTo(loc));
Log.i("FontaneDB", "loc: "+loc.toString());
Log.i("FontaneDB", "mcurr "+ mCurrentLocation.distanceTo(loc));
Log.i("Distanza", "distanza: "+distance);
Log.i("Prova", "Latitudine: " + fontana.get("latitudine").toString());
if (contatore == 1) {
mMap.addMarker(new MarkerOptions().
position(new LatLng(fontana.get("latitudine"), fontana.get("longitudine"))).
icon(BitmapDescriptorFactory.
defaultMarker(BitmapDescriptorFactory.HUE_BLUE)).title(distance + "m")).showInfoWindow();
contatore++;
}
else {
mMap.addMarker(new MarkerOptions().
position(new LatLng(fontana.get("latitudine"), fontana.get("longitudine"))).
icon(BitmapDescriptorFactory.
defaultMarker(BitmapDescriptorFactory.HUE_BLUE)).title(distance + "m"));
}
}
}
}
}
das Verfahren onProgressUpdate nicht verwendet wird .. Und ich würde es gerne für Begrüßungsbildschirm verwenden. Wie kann ich es tun, wenn es möglich ist?
Sie können dies tun, für Ihre ändern - es funktioniert gut für mich für die gleichen Arten von Problem.
private Klasse Kellner erweitert AsyncTask {
@Override
protected Void doInBackground(Void... params) {
try {
// do your background job like load Map
} catch (Exception e) {
e.printStackTrace();
}finally{
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
//Show Map here or pass Map Activity after parsing completion
}
}
Tnx für die Antwort zu tun, aber ich denke, ist nicht das, was ich brauche. Im Folgenden finden Sie den Code für die Kommunikation mit db und all die Sachen für die Karte. Aber ich weiß nicht, ob es möglich ist, einen Splash-Screen von onProgressUpdate zu zeigen oder nicht .. Und wie kann ich es tun ... – Yoshi
hast du es nicht verstanden ich denke :) btw danke –
nein ... ich habe ' t -.- – Yoshi
Hier eine mögliche (ungetestet) ist Lösung, eine SplashActivity.java haben, die die Karte auf Ihre MainActivity.java übergibt, der dann analysieren und die Karte angezeigt werden:
SplashActivity.java
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
new AsyncTaskRunner.execute();
}
public void mapsRetrieved(List<Map<String, Double>> maps) {
Intent intent = new Intent(this, MainActivity.class); //adjust class name as needed
intent.putExtra("maps", maps);
startActivity(intent);
}
private class AsyncTaskRunner extends AsyncTask<Double, Void, List<Map<String, Double>>> {
//YOUR CODE
@Override
protected void onPostExecute(List<Map<String, Double>> maps) {
mapsRetrieved(maps);
}
}
}
im activity_splash.xml, importieren Sie die JPEG- als ziehbar Vermögenswert und ersetzen {YOUR_BACKGROUND_HERE}
activity_splash.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
<!-- REPLACE {YOUR_BACKGROUND_HERE} -->
android:background="@drawable/{YOUR_BACKGROUND_HERE}"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.daose.watinfo.SplashActivity"/>
Sie die Karte abrufen können wie so
MainActivity.java
public class EventListActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
List<Map<String, Double>> maps = (List<Map<String, Double>>) getIntent().getSerializableExtra("maps");
//YOUR ORIGINAL POST-EXECUTE CODE BELOW
}
}
Dann in Ihrem AndroidManifest.xml, ändere wh bei Aktivität wird gestartet, wenn die App geöffnet wird.
AndroidManifest.xml
<application
<!-- other stuff -->
<activity android:name=".SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- other stuff -->
</application>
- 1. Benutzerdefinierter Begrüßungsbildschirm bei der Anmeldung RHEL
- 2. ExceptionInInitializerError bei Verwendung von AsyncTask
- 3. Cordova iOS Begrüßungsbildschirm
- 4. läuft nicht oncreateview bei Fragment nach AsyncTask
- 5. ionischer Begrüßungsbildschirm nicht funktioniert
- 6. Wie netbeans Begrüßungsbildschirm ausschalten?
- 7. Verwenden von AsyncTask zum Schlafen
- 8. ProgressBar in Silverlight benutzerdefinierten Begrüßungsbildschirm
- 9. Video als Begrüßungsbildschirm auf phonegap
- 10. SpriteKit Game-Ladebildschirm (kein Begrüßungsbildschirm)
- 11. iOS: Umgehen Sie den Begrüßungsbildschirm
- 12. GIF-Datei im Begrüßungsbildschirm Ionic
- 13. Probleme im Begrüßungsbildschirm mit progressDialog
- 14. AsyncTask zeigt keine URI
- 15. Android AsyncTask in einem anderen AsyncTask
- 16. Android HttpClient stürzt bei Ausführungsanforderung ab als AsyncTask
- 17. Was passiert bei Activity.finish() mit AsyncTask noch im Hintergrund?
- 18. SwiftyJson bei der Integration von Google Maps
- 19. Android Maps - Limit bei 180 Grad
- 20. Wie erstelle ich Ränder bei Google Maps?
- 21. OVER_QUERY_LIMIT bei der Verwendung von Google Maps
- 22. Repeat AsyncTask
- 23. Asynctask Fehlerbehandlung
- 24. "FATALE AUSNAHME AsyncTask # 1" erhalten
- 25. Asynctask stecken bleiben
- 26. Wie funktioniert Android Asynctask?
- 27. Skalierte Assets für Begrüßungsbildschirm in UWP
- 28. Begrüßungsbildschirm funktioniert nicht mit Cordova 6.0.0
- 29. Facebook Messenger Plattform Begrüßungsbildschirm wird nicht angezeigt
- 30. Entfernen Sie den Begrüßungsbildschirm manuell in PhoneGap
zeigen Codes, was Sie –