将Lat / Lng传递给android中的onPostExecute

时间:2014-07-18 00:04:20

标签: android google-maps

我正在尝试从json在android中创建一个谷歌地图,但无法从AsyncTask获取onPostExecute中的latlng值。我是新手。 这是我的代码。

 // 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缺少lat / lng值。

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

上面的行显示我在logcat中的lat / lng值非常正确,我在doInBackground中执行。

我是Android新手,并希望SO社区能帮助我指导我正确的方式。

1 个答案:

答案 0 :(得分: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>>>