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>
zeigen Codes, was Sie –