Java json数组值从volley转换为hashmap字符串,string
我请求使用凌空截击从Java json数组值从volley转换为hashmap字符串,string,java,android,json,string,android-volley,Java,Android,Json,String,Android Volley,我请求使用凌空截击从jsonArray构建滑块图像,我不知道如何将jsonArray的值放入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",
jsonArray
构建滑块图像,我不知道如何将jsonArray
的值放入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
内部onCreate()
我不知道如何从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);
}
private void getSlider(){
String tag\u String\u req=“sliderList”;
//在发出http请求之前显示进度对话框
JsonArrayRequest mostReq=newjsonarrayrequest(AppConfig.URL\u Slider,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
Log.d(TAG,response.toString());
试一试{
对于(int i=0;i<5;i++){
JSONObject jObj=response.getJSONObject(i);
url_maps.put(jObj.getString(“cPID”)、jObj.getString(“image”);
}
}
捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(标记“Error:”+“出现错误数据!!”+Error.getMessage());
Toast.makeText(getContext(),
error.getMessage(),Toast.LENGTH_LONG).show();
hideDialog();
}
}) ;
AppController.getInstance().addToRequestQueue(mostReq,标记字符串请求);
}
在截击中接受了值请求,它显示在
Logcat
上。。但是hashmap
上为空。。如果我的代码有错误,请告诉我,抱歉,只是新手,仍在学习您正在通过键进行迭代。。。您需要遍历键和值
for (url_maps.Entry<String, String> url_map : url_maps.entrySet()) {
String key = url_map.getKey();
String value = url_map.getValue();
// ...
}
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编写代码了,所以这段代码没有经过测试,但应该可以帮助您找到解决方案。保留错误。。我认为我在地图绘制上犯了错误。。请告诉我,在
volleyRequest
value中要做什么..我看到了你的问题。。。检查我的解决方案的顶部。我认为您只是通过键进行迭代,您还需要通过值进行迭代,以获得数据。
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);
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()