2016-07-12 9 views
1

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

+0

zeigen Codes, was Sie –

Antwort

0

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?

0

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 
    } 
} 
+0

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

+0

hast du es nicht verstanden ich denke :) btw danke –

+0

nein ... ich habe ' t -.- – Yoshi

0

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> 
Verwandte Themen