我正在尝试从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社区能帮助我指导我正确的方式。
答案 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>>>