2016-07-27 124 views
-1

我必须使用抽射jsonArray建立滑块图像的请求,我不知道如何把的jsonArray价值hashmap<string, string> ..它一直在说空对象JSON数组值到HashMap中的字符串,字符串

错误消息

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"} 
] 

然后我想把该值是这样成hashmap<string, string>内部onCreate()

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,这是我的要求但错误说空。

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 ..告诉我,如果我在我的代码错误,对不起只是新手,还是学习

回答

0

你迭代通只是按键......你需要通过键和值进行迭代...

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编写了很长时间,所以这段代码没有经过测试,但应该可以帮助您找到解决方案。

+0

保持错误..我想我的mapper错误..你会让我知道,'volleyRequest'的值应该怎么做.. –

+0

我看到你的问题...检查我的解决方案的顶部。我认为你只是迭代通过键,你还需要迭代通过值,以获得数据。 – Dethryl