gpt4 book ai didi

java - Android - 等待 Volley 响应继续

转载 作者:行者123 更新时间:2023-12-03 18:37:42 26 4
gpt4 key购买 nike

我构建了一个应用程序,它在 map 中加载标记,我为 volley JSON 文件获取它的标记,但我需要首先加载 volley,然后继续执行代码,因为另一种方式向我显示错误 latLng 空值 ,这个参数加载不快,先执行另一个方法,给我看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

最佳答案

您需要为 Volley 响应实现回调。一个非常简单的方法如下。

第 1 步:创建此接口(interface)

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);
});

关于java - Android - 等待 Volley 响应继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49342841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com