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 没有响应”

Android ANR总结

使用单个元素 android studio 获取 Json 数组

凌空 NullPointerException

转如何分析解决Android ANR

如何用凌空POST jsonobject