2014-07-18 70 views
1

我試圖在android中從json創建google map但無法從AsyncTask獲取onPostExecute中的latlng值。我是新手。 這是我的代碼。將Lat/Lng傳遞給onPostExecute在android

// Declare Variables 
JSONObject jsonobject; 
JSONArray jsonarray; 
ListView listview; 
ListViewAdapter adapter; 
ProgressDialog mProgressDialog; 
ArrayList<HashMap<String, String>> arraylist; 
static String ID="id"; 
static String NAME = "name"; 
static String LAT="lat"; 
static String LNG="lng"; 



@Override 
    protected String doInBackground(String... params) { 
     // Create an array 
     arraylist = new ArrayList<HashMap<String, String>>(); 
     // Retrieve JSON Objects from the given URL address 
     jsonobject = JSONfunctions 
       .getJSONfromURL("https://sitename.com/storeListJson.php"); 

     try { 
      // Locate the array name in JSON 
      jsonarray = jsonobject.getJSONArray("contacts"); 

      for (int i = 0; i < jsonarray.length(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       JSONObject jsonobject = jsonarray.getJSONObject(i); 
       // Retrive JSON Objects 
       map.put("id", jsonobject.getString("id")); 
       map.put("name", jsonobject.getString("name")); 

       map.put("lat",jsonobject.getString("lat")); 
       map.put("lng",jsonobject.getString("lng")); 

       String latt=jsonobject.getString(LAT); 
       String lngg=jsonobject.getString(LNG); 

       // Set the JSON Objects into the arrayddf 
      // arraylist.add(map); 



       Log.d("Location", "Location:" + latt + " " + lngg); 
       //above line shows me the lat/lng values quite right in logcat 

      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 



    @Override  

    protected void onPostExecute(String result) 
    { 


    //what to write here, tried all things but cant get lat/lng vals 


    } 

我嘗試了很多的方法,通常得到其次NPE錯誤原因onPostExecute緯度/經度值丟失空白地圖。

Log.d("Location", "Location:" + latt + " " + lngg); 

上面的線條顯示我在logcat中的lat/lng值,我在doInBackground中執行。

我是新來的android的東西,希望SO社區將幫助我指導我正確的方式。

回答

0

您只需在您的doInBackground()方法中傳遞latt和lngg的值而不是null即可。

@Override 
protected String doInBackground(String... params) { 
    // Create an array 
    arraylist = new ArrayList<HashMap<String, String>>(); 
    // Retrieve JSON Objects from the given URL address 
    jsonobject = JSONfunctions 
      .getJSONfromURL("https://sitename.com/storeListJson.php"); 

    try { 
     // Locate the array name in JSON 
     jsonarray = jsonobject.getJSONArray("contacts"); 

     for (int i = 0; i < jsonarray.length(); i++) { 
      HashMap<String, String> map = new HashMap<String, String>(); 
      JSONObject jsonobject = jsonarray.getJSONObject(i); 
      // Retrive JSON Objects 
      map.put("id", jsonobject.getString("id")); 
      map.put("name", jsonobject.getString("name")); 

      map.put("lat",jsonobject.getString("lat")); 
      map.put("lng",jsonobject.getString("lng")); 

      String latt=jsonobject.getString(LAT); 
      String lngg=jsonobject.getString(LNG); 

      // Set the JSON Objects into the arrayddf 
      arraylist.add(map); 


      Log.d("Location", "Location:" + latt + " " + lngg); 
      //above line shows me the lat/lng values quite right in logcat 

     } 
    } catch (JSONException e) { 
     Log.e("Error", e.getMessage()); 
     e.printStackTrace(); 
    } 
    return arraylist; 
} 



@Override  

protected void onPostExecute(ArrayList<HashMap<String, String>> results) 
{ 
    //Do what you want with the results here 

} 

也要去有去部分,你延長AsyncTask並改變它,所以它也包括arraylist,像extends AsyncTask<String, null, ArrayList<HashMap<String, String>>>

+0

錯過一些信息。已編輯 – Shadesblade

+0

感謝您的指導。我已經能夠獲得onPostExecute內的lat/lng(LogCat顯示所有條目)。但是,當我嘗試繪製地圖時,沒有任何反應。 'setUpMap();for(int i = 0; i user3170139

+0

我終於可以用標記顯示地圖。我一直在使用code語句在第二個地方調用mapIntialize函數。也許忘了我曾經說過兩次。非常感謝您的支持。 OS社區岩石! – user3170139

相關問題