全球动态数组列表不更新/函数修改而得到

lat和长都具有当前位置的变量中,谷歌的地方搜索API JSON格式凌空响应全球动态数组" title="动态数组">动态数组列表不更新/函数修改而得到

if(lat!=0.0||longg!=0.0){ 

search();

details(placeId);

}

这里是search()函数.... placeID是全球性的ArrayList的变量

public void search() { 

String url ="https://maps.googleapis.com/maps/api/place/nearbysearch/json?Location="+lat+","+longg+"&radius=5000&type=hospital&name=Hospital&key=AIzaSyA71lHTBWnb8uNvUI0N8ch8lhvla_0pM8";

Log.e("URL 1st : ", url);

final ArrayList<String> idd = new ArrayList<>();

Response.Listener<JSONObject> myListener = new Response.Listener<JSONObject>() {

@Override

public void onResponse(JSONObject response) {

String status = null;

try {

status = response.getString("status");

} catch (JSONException e) {

e.printStackTrace();

}

if (status != null && status.equals("ZERO_RESULTS")) {

Log.e("Response Status: ", "search was successful but returned no results.This may occur if the search was passed a latlng in a remote location.");

Toast.makeText(NearByHospitals.this, "You are in remote location.\nNo Nearby Hospitals", Toast.LENGTH_SHORT).show();

} else if (status != null && status.equals("OVER_QUERY_LIMIT")) {

Log.e("Response Status: ", "indicates that you are over your quota.");

} else if (status != null && status.equals("REQUEST_DENIED")) {

Log.e("Response Status: ", "indicates that your request was denied, generally because of lack of an invalid key parameter.");

} else if (status != null && status.equals("INVALID_REQUEST")) {

Log.e("Response Status: ", "generally indicates that a required query parameter (location or radius) is missing.");

} else {

int sizeOfResponse = 0;

try {

sizeOfResponse = response.getJSONArray("results").length();

} catch (JSONException e) {

e.printStackTrace();

}

for (int i = 0; i < sizeOfResponse; i++) {

try {

if (response.getJSONArray("results").getJSONObject(i).has("opening_hours") && response.getJSONArray("results").getJSONObject(i).getJSONObject("opening_hours").getBoolean("open_now")) {

placeId.add(response.getJSONArray("results").getJSONObject(i).getString("place_id"));

Log.e("iddd", response.getJSONArray("results").getJSONObject(i).getString("place_id"));

locat.add(String.valueOf(response.getJSONArray("results").getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getDouble("lat")) + "," + String.valueOf(response.getJSONArray("results").getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getDouble("lng")));

}

} catch (JSONException e) {

e.printStackTrace();

}

}

}

}

};

Response.ErrorListener myErrorListener = new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

Toast.makeText(NearByHospitals.this, error.getMessage(), Toast.LENGTH_LONG).show();

}

};

JsonObjectRequest myRequest = new JsonObjectRequest(Request.Method.GET,url, null, myListener, myErrorListener);

Volley.newRequestQueue(NearByHospitals.this).add(myRequest);

}

我想用placeId(全球ArrayList中)在我的个人资料作进一步的细节 这里的功能是我的个人资料()函数

public void details(ArrayList<String> strId) { 

for (int i = 0; i < strId.size(); i++) {

try {

String url2 = "https://maps.googleapis.com/maps/api/place/details/json?placeid=" + strId.get(i) + "&key=AIzaSyA718lHTBWnb8uNvUI0N8ch8lhvla_0pM8";

Log.e("URL2 ", url2);

Response.Listener<JSONObject> myListener2 = new Response.Listener<JSONObject>() {

@Override

public void onResponse(JSONObject response) {

String status = null;

try {

status = response.getString("status");

} catch (JSONException e) {

e.printStackTrace();

}

if (status != null && status.equals("ZERO_RESULTS")) {

Log.e("Response Status: ", "indicates that the reference was valid but no longer refers to a valid result. This may occur if the establishment is no longer in business.");

} else if (status != null && status.equals("OVER_QUERY_LIMIT")) {

Log.e("Response Status: ", "indicates that you are over your quota.");

} else if (status != null && status.equals("REQUEST_DENIED")) {

Log.e("Response Status: ", "indicates that your request was denied, generally because of lack of an invalid key parameter.");

} else if (status != null && status.equals("INVALID_REQUEST")) {

Log.e("Response Status: ", "generally indicates that the query (reference) is missing.");

} else {

if (status != null && status.equals("OK")) {

try {

hosNames.add(response.getJSONObject("result").getString("name"));

phoneNumbers.add(response.getJSONObject("result").getString("international_phone_number"));

} catch (JSONException e) {

e.printStackTrace();

}

}

}

}

};

Response.ErrorListener myErrorListener2 = new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

Toast.makeText(NearByHospitals.this, error.getMessage(), Toast.LENGTH_LONG).show();

}

};

JsonObjectRequest myRequest2 = new JsonObjectRequest(Request.Method.GET, url2, null, myListener2, myErrorListener2);

Volley.newRequestQueue(NearByHospitals.this).add(myRequest2);

} catch (NullPointerException l) {

l.printStackTrace();

}

}

}

但问题是placeId是空的,它的大小为零。我在调试时检查这个变量n一切都很好arraylist在调试时被修改。我不知道我在哪里错了?

回答:

从下面:

search(); 

details(placeId);

在方法搜索()你是一个异步线程修改placeId列表,这样,当你运行的详细信息(placeId),要传递作为参数placeId不算不保证修改列表。您可能想要在填充placeId内的抽签响应中调用详细信息(placeId)。

以上是 全球动态数组列表不更新/函数修改而得到 的全部内容, 来源链接: utcz.com/qa/257304.html

回到顶部