2016-07-12 3 views
1

Когда я запускаю свое приложение, он отправляет запрос в db через класс AsyncTask. В то время как приложение получает данные, я получил белый экран, и когда связь с db будет завершена, отобразится карта со всем маркером, полученным с сервера. Мне интересно, есть ли способ показать заставку, используя onProgressUpdate. Или, если есть лучший способ показать заставку. Изображение, которое я выбираю, является файлом jpeg.Заставка экрана на AsyncTask & Maps

+0

показать коды, что вы делаете –

ответ

0

OnLocationChanged Я называю AsyncTask:

AsyncTaskRunner run = new AsyncTaskRunner(); 
      run.execute (lat, lng); 

поэтому код 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")); 
       } 
      } 
     } 


    } 
} 

метод onProgressUpdate не используется .. И я хотел бы использовать его для SplashScreen. Как я могу это сделать, если это возможно?

0

Вы можете сделать это, измените для себя - он отлично подходит для меня для тех же проблем.

частный класс официант расширяет 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 за ответ, но я думаю, это не то, что мне нужно. Ниже вы можете найти код для общения с db и все материалы для карты. Но я не знаю, возможно ли показать всплеск экрана onProgressUpdate или нет. И как я могу это сделать ... – Yoshi

+0

вы не поняли, что я думаю :) btw спасибо –

+0

nope ... Я не знаю, т- – Yoshi

0

Вот возможное (непроверенное) решение, есть SplashActivity.java, который проходит карту к вашему MainActivity.java, что затем анализировать и отображать карту:

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); 
     } 
    } 
} 

В activity_splash.xml, импортировать .jpeg как вытяжке актива и заменить {} 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"/> 

Вы можете получить карту как так

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

Тогда в вашем AndroidManifest.xml, изменить wh при запуске приложения открывается.

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> 
Смежные вопросы