我无法从方法返回LinkedHashMap,我得到null

时间:2016-11-24 18:10:39

标签: android linkedhashmap

我使用一种方法从服务器获取我的json对象。接收我的对象的部分工作正常,我收到我的回复,并尝试将我的值放入linkedhashmap。当我尝试返回我的地图我得到空

我的方法就像:

 public static  LinkedHashMap<String,ArrayList<String>>  GetBusinessInCategories() 

我在我的方法之外声明了我的linkhashmap:

final static  LinkedHashMap<String,ArrayList<String>> myMap = new LinkedHashMap<String,ArrayList<String>>();


public static  LinkedHashMap<String,ArrayList<String>>  GetBusinessInCategories() {
    String tag_string_req = "req_register";
    //final LinkedHashMap<String,ArrayList<String>> myMap = new LinkedHashMap<String,ArrayList<String>>();
    //showDialog();

    // prepare the Request
    StringRequest getRequest = new StringRequest(Request.Method.GET, URL_GET_BUSINESS_CATS, new Response.Listener<String>()
    {
                @Override
                public void onResponse(String response)
                {
                    String MyResponse = fixEncodingUnicode(response);
                    JSONObject j = null;
                    JSONArray result;

                    ArrayList listData = new ArrayList<String>();
                    ArrayList NewlistData = new ArrayList<String>();

                    try {
                        j = new JSONObject(MyResponse);

                        JSONArray jarray = j.getJSONArray("List");
                        for (int hk = 0; hk < jarray.length(); hk++) {
                            JSONObject d = jarray.getJSONObject(hk);
                            // Adding Header data
                            JSONObject obj_cat = d.getJSONObject("Category");
                            JSONObject obj_bus = d.getJSONObject("Business");
                            String myKey = obj_cat.getString("cat_id");
                            String myVal = obj_bus.getString("Name");

                            if(myMap.containsKey(myKey))
                            {
                                listData.add(myVal);
                                ArrayList MergeNewlistData = new ArrayList<String>();
                                MergeNewlistData.addAll(listData);
                                MergeNewlistData.addAll(NewlistData);
                                myMap.put(myKey,MergeNewlistData);

                            }else
                            {
                                    NewlistData = new ArrayList<String>();
                                    NewlistData.add(myVal);
                                    myMap.put(myKey,NewlistData);
                            }

                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                    // display response
                    //Log.d("Response", mympap.toString());
                    // display response
                    Log.d("Response", MyResponse.toString());

                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("Error", "Registration Error: " + error.getMessage());
                    Toast.makeText(context, error.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
    );
    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(getRequest, tag_string_req);
    return myMap;

}

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

  

当我尝试返回我的地图时,我得到null。我在这里做错了什么?

您无法让您的方法返回地图。只是让它无效。

如果您需要使用地图,请声明一个接受它作为参数的方法,将地图传递给Volley侦听器中onResponse的最末端,并继续在该新方法中构建适配器等。

你应该如何使用异步方法 - 换句话说,当你在后台执行其他操作时关闭Volley代码时,你会立即返回null