Android - 等待凌空响应继续
Posted
技术标签:
【中文标题】Android - 等待凌空响应继续【英文标题】:Android - Wait for volley response for continue 【发布时间】:2018-08-26 19:48:17 【问题描述】:我构建了一个应用程序,它在地图中加载标记,我为 volley JSON 文件获取它的标记,但我需要首先加载 volley,然后继续执行代码,因为另一种方式显示错误latLng null,这个参数加载不快,先执行另一个方法,给我看null。
我的负载标记截击代码
public void getMarkers()
requestQueue = Volley.newRequestQueue(getApplicationContext());
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
try
JSONArray saagTracker = response.getJSONArray("saagMRK");
for (int i = 0; i < saagTracker.length(); i++)
JSONObject object = saagTracker.getJSONObject(i);
title = object.getString(TITLE);
snnipet = object.getString(SNNIP);
latLng = new LatLng(Double.parseDouble(object.getString(LAT)), Double.parseDouble(object.getString(LNG)));
coor = coor + "|" + object.getString(LAT) + "," + object.getString(LNG); // Menambah data marker untuk di tampilkan ke google map
addMarker(latLng, title, snnipet);
catch (JSONException e)
e.printStackTrace();
//JSONArray array = new JSONArray(response.body().string());
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Toast.makeText(MainActivity.this, "Ocurrio un error", Toast.LENGTH_LONG).show();
);
requestQueue.add(jsonObjectRequest);
onCreate
首先需要 latLng 才能加载我的geofire
参数
geoQuery = geofire.queryAtLocation(new GeoLocation(latLng.latitude, latLng.longitude),0.1f); // latLng it coming null
【问题讨论】:
你什么时候给getMarkers()
打电话?
在geofire参数之前,进入onCreate
就在geofire.queryAtLocation()
调用之前?
之前是:getMarkers();
geoQuery = geofire.queryAtLocation(new GeoLocation(latLng.latitude, latLng.longitude),0.1f);
【参考方案1】:
您需要为 volley 响应实现回调。一个非常简单的方法如下。
第 1 步:创建此接口
public interface VolleyCallBack
void onSuccess();
第 2 步:将您的 getMarkers()
方法更改为:
public void getMarkers(final VolleyCallBack callBack)
requestQueue = Volley.newRequestQueue(getApplicationContext());
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
try
JSONArray saagTracker = response.getJSONArray("saagMRK");
for (int i = 0; i < saagTracker.length(); i++)
JSONObject object = saagTracker.getJSONObject(i);
title = object.getString(TITLE);
snnipet = object.getString(SNNIP);
latLng = new LatLng(Double.parseDouble(object.getString(LAT)), Double.parseDouble(object.getString(LNG)));
coor = coor + "|" + object.getString(LAT) + "," + object.getString(LNG); // Menambah data marker untuk di tampilkan ke google map
addMarker(latLng, title, snnipet);
callback.onSuccess();
catch (JSONException e)
e.printStackTrace();
//JSONArray array = new JSONArray(response.body().string());
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Toast.makeText(MainActivity.this, "Ocurrio un error", Toast.LENGTH_LONG).show();
);
requestQueue.add(jsonObjectRequest);
第 3 步:像这样调用您的 getMarkers()
方法:
getMarkers(new VolleyCallBack()
@Override
public void onSuccess()
// this is where you will call the geofire, here you have the response from the volley.
geoQuery = geofire.queryAtLocation(new GeoLocation(latLng.latitude, latLng.longitude),0.1f);
);
【讨论】:
非常感谢您的帮助以上是关于Android - 等待凌空响应继续的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio-AVD“系统 UI 没有响应”