private void sendRequest(){
StringRequest stringRequest = new StringRequest(JSON_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
showJSON(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
有什么不对,得到nullPointerExeption
URL:
ShowJson方法
private void showJSON(String json){
ParseJSON pj = new ParseJSON(json);
pj.parseJSON();
CustomList cl = new CustomList(this, ParseJSON.id,ParseJSON.app_version);
listView.setAdapter(cl);
}
解析JSON类
public class ParseJSON {
public static String[] id;
public static String[] app_version;
public static final String JSON_ARRAY = "result";
public static final String KEY_ID = "id";
public static final String KEY_APP_VERSION = "app_version";
private JSONArray users = null;
private String json;
public ParseJSON(String json){
this.json = json;
}
protected void parseJSON(){
JSONObject jsonObject=null;
try {
jsonObject = new JSONObject(json);
users = jsonObject.getJSONArray(JSON_ARRAY);
id = new String[users.length()];
app_version = new String[users.length()];
for(int i=0;i<users.length();i++){
JSONObject jo = users.getJSONObject(i);
id[i] = jo.getString(KEY_ID);
app_version[i] = jo.getString(KEY_APP_VERSION);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
解决方案:
我发现您在课堂上id
字段中的String
字段为response
而在Integer
中,您将获得"id":1
值。这就是错误发生的原因。
说明:
在您的回复中,您会收到"id":"1"
,但实际上您需要public static String[] id;
。
更改:
1。)将此public static Integer[] id;
更改为id[i] = jo.getString(KEY_ID);
2。)将此id[i] = jo.getInt(KEY_ID);
更改为<a href="">Link</a>
<br>
<a href="">Link</a>
<br>
<a href="">Link</a>
<br>
<a href="">Link</a>
<br>
<a href="">Link</a>
<br>
<p>any long short text does not matter
any long short text does not matter</p>
<br>
<p>any long short text does not matter</p>
<br>
<select>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
</select>
<a href="">Link</a>
<br>
<a href="">Link</a>
<br>
<a href="">Link</a>
<br>
<a href="">Link</a>
<br>
<a href="">Link</a>
<br>
<p>any long short text does not matter
any long short text does not matter</p>
<br>
<p>any long short text does not matter</p>
<br>
。
答案 1 :(得分:1)
我认为它必须对你的JSON做些什么。 你首先要求一个JSONObject。 在这个JSONObject中,您需要一个名为JSONArray的结果。 在这个JSONArray中,你需要2个值:id和app_version。 所以我认为JSON需要看起来像这样:
{
"result": [
{"id": "1", "app_version": "1"}
]
}
对于更多用户,它看起来像:
{
"result": [
{"id": "1", "app_version": "1"},
{"id": "2", "app_version": "1"},
{"id": "3", "app_version": "2"}
]
}
或强>
如果您无法更改JSON,则需要进行一些更改:
users = new JSONArray(json);
getInt()
代替getString()
。答案 2 :(得分:0)
您的回复是:
[
{
"id": 1,
"app_version": "1"
}
]
这里是json对象的列表。对象包含&#34; id&#34;这是整数和&#34; app_version&#34;是字符串。您可以使用Gson
库轻松解析此响应。以下是示例代码:
在build.gradle文件中添加此依赖项
compile 'com.google.code.gson:gson:2.2.4'
现在创建一个这样的类:
import com.google.gson.annotations.SerializedName;
public class ResponseObject {
@SerializedName("id")
public Integer id;
@SerializedName("app_version")
public String app_version;
}
现在,您可以使用以下方式解析您的回复:
Type listType = new TypeToken<ArrayList<ResponseObject>>() {
}.getType();
List<ResponseObject> yourClassList = new Gson().fromJson(jsonArray, listType);
此处,jsonArray
是您的响应数组。
希望这会对你有所帮助。