我有一个使用截击从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);
}
我不知道如何从volley
到JsonArray
中放入值,这是我的请求,但错误为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编码了,所以这段代码还没有经过测试,但应该可以帮助您找到解决方案。