json数组值从截距转换为hashmap字符串,string



我有一个使用截击从jsonArray构建滑块图像的请求,我不知道如何将jsonArray的值设置为hashmap<string, string>。。它一直说空对象

错误消息

Attempt to invoke virtual method 'java.lang.Object
java.util.HashMap.put(java.lang.Object, java.lang.Object)' on a null object reference

JSON数组值

[
     {"cPID":"62001002280293829",
      "image":"http://ibigcreative.com/dev/assets/images/slider/rsch.jpg"},
     {"cPID":"62001002020254584",
      "image":"http://ibigcreative.com/dev/assets/images/slider/penang.jpg"},
     {"cPID":"62001002050264258",
      "image":"http://ibigcreative.com/dev/assets/images/slider/guardian.jpg"}
]

然后我想把这个值放在onCreate() 中的hashmap<string, string>

HashMap<String,String> url_maps = new HashMap<>();
        url_maps.put("Hannibal", "http://static2.hypable.com/wp-content/uploads/2013/12/hannibal-season-2-release-date.jpg");
        url_maps.put("Big Bang Theory", "http://tvfiles.alphacoders.com/100/hdclearart-10.png");
        url_maps.put("House of Cards", "http://cdn3.nflximg.net/images/3093/2043093.jpg");
        url_maps.put("Game of Thrones", "http://images.boomsbeat.com/data/images/full/19640/game-of-thrones-season-4-jpg.jpg");

它将用于将图片添加到onCreate() 内的滑块(幻灯片)

for(String name : url_maps.keySet()){
            DefaultSliderView DefaultSliderView = new DefaultSliderView(getContext());
            // initialize a SliderLayout
            DefaultSliderView
                    .image(url_maps.get(name))
                    .setScaleType(BaseSliderView.ScaleType.Fit)
                    .setOnSliderClickListener(this);
            //add your extra information
            DefaultSliderView.bundle(new Bundle());
            DefaultSliderView.getBundle()
                    .putString("extra",name);
            mDemoSlider.addSlider(DefaultSliderView);
        }

我不知道如何从volleyJsonArray中放入值,这是我的请求,但错误为null。

private void getSlider(){
        String tag_string_req = "sliderList";
        // Showing progress dialog before making http request
        JsonArrayRequest mostReq = new JsonArrayRequest(AppConfig.URL_Slider, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                Log.d(TAG, response.toString());
                try  {
                    for (int i = 0; i < 5; i++) {
                        JSONObject jObj = response.getJSONObject(i);
                        url_maps.put(jObj.getString("cPID"), jObj.getString("image"));
                    }
                }
                catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + "Error Data Occured!!" + error.getMessage());
                Toast.makeText(getContext(),
                        error.getMessage(), Toast.LENGTH_LONG).show();
                hideDialog();
            }
        }) ;
        AppController.getInstance().addToRequestQueue(mostReq, tag_string_req);
    }

值请求在截击时被接受,它显示在Logcat上。。但在hashmap上为null。。如果我的代码有错误,请告诉我,对不起,只是新手,仍在学习

您只遍历键。。。您需要遍历键和值。。。

for (url_maps.Entry<String, String> url_map : url_maps.entrySet()) {
    String key = url_map.getKey();
    String value = url_map.getValue();
    // ...
}

另一种尝试的方法是…

将Json反序列化为java对象。。。

ObjectMapper mapper = new ObjectMapper();
string StringJson = "[
     {"cPID":"62001002280293829",
      "image":"http://ibigcreative.com/dev/assets/images/slider/rsch.jpg"},
     {"cPID":"62001002020254584",
      "image":"http://ibigcreative.com/dev/assets/images/slider/penang.jpg"},
     {"cPID":"62001002050264258",
      "image":"http://ibigcreative.com/dev/assets/images/slider/guardian.jpg"}
]";
// For the following line to work you will need to make a URLMaps Class to hold the objects
URLMaps urlMaps = mapper.readValue(StringJson , URLMaps.class);

URLMaps类可能是这样的。

public class URLMaps{
    public string name = "";
    public string image = "";
    //constructor
    public URLMaps(string a, string b) {
        name = a;
        image = b;
    }
    public string getName() {
        return name;
    }
    public string getImage() {
        return image;
    }
}

然后使用你可以使用的类:

urlMaps.getName(), or urlMaps.getValue() in your DefaultSliderView.image()

还需要注意的是,由于这是一个类,您可以存储它们的数组或列表,因此您可以重新使用for循环。。。

For (URLMap urlmap : UrlMaps[])//其中URLMaps是包含URLMaps的多个实例的对象。

最后,我已经很久没有用Java编码了,所以这段代码还没有经过测试,但应该可以帮助您找到解决方案。

最新更新