我想将数据发布到url
并获取Null pointer exception
我的JSON
URL
包含
{
"Details":
[
{
"Status":"NO UPDATES"
}
]
}
我收到错误:
String status = object.getString("Status").trim(); //error Line
完整代码:
btnPost = (Button)findViewById(R.id.btnPost);
btnPost.setOnClickListener(this);
btnPost.setOnClickListener(new OnClickListener()
{
@SuppressWarnings("null")
@Override
public void onClick(View arg0)
{
try
{
String postReceiverUrl = "http://";
Log.v(TAG, "postURL: " + postReceiverUrl);
// HttpClient
@SuppressWarnings("resource")
HttpClient httpClient = new DefaultHttpClient();
// post header
HttpPost httpPost = new HttpPost(postReceiverUrl);
jsonobject.put("IDNo", IDNo.getText().toString());
jsonobject.put("Position", Position.getText().toString());
jsonobject.put("Data", Data.getText().toString());
HttpResponse response = httpClient.execute(httpPost);
String jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
Log.v("jsonResult",jsonResult);
JSONObject object = new JSONObject(jsonResult);
String status = object.getString("Status").trim();
Toast.makeText(getBaseContext(), "Please wait...",100).show();
if(status.toString().equals("SUCCESS"))
{
Intent i = new Intent(LoginPage.this,MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
if(status.toString().equals("FAILED"))
{
Toast.makeText(getBaseContext(), "Wrong Credentials",100).show();
}
else
{
Toast.makeText(getBaseContext(), "Details Inserted",100).show();
}
}
catch(Exception e)
{
e.printStackTrace();
}
catch (JSONException e)
{
e.printStackTrace();
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
});
正确解析JSON
,您会看到您的响应:-
{ "Details":[{"Status":"NO UPDATES"}]}
所以首先尝试使JSONObject
的对象比JSONArray
之后,请看下面的例子:-
JSONObject jsonObject = new JSONObject(jsonResult);
JSONArray detailsArray = jsonObject.getJSONArray("Details");
String status = dataArray.getJSONObject(0).getString("status");
Toast.makeText(getBaseContext(), "Please wait...",100+status).show();
你的代码应该是这样的
JSONObject object = new JSONObject(jsonResult);
JSONOArray details = object.getJSONArray("Details");
for (int i = 0; i < details.length(); i++) {
JSONObject c = details.getJSONObject(i);
String status = c.getString("Status");
}
Toast.makeText(getBaseContext(), "Please wait...",100).show();
Modift String status = object.getString("Status").trim();
to
String status = object.get("Details").getAsJsonArray()[0].getString("Status").trim();
您正在使用getString("Status")
如果 JSON 中没有可用的密钥,则可能会返回null
。我建议您使用optString("Status")
如果键不可用,它将返回空白字符串。
JSONObject jsonObject = new JSONObject(stringJSON);
JSONArray jsonArray = jsonObject.optJSONArray("Details");
if(jsonArray != null){
for(int i = 0; i < jsonArray.length(); i++){
JSONObject jObject = jsonArray.optJSONObject(i);
if(jObject != null){
String strStatus = jObject.optString("Status");
}
}
}
试试这段代码
JSONObject object = new JSONObject(jsonResult);
JSONArray array=object.getJsonarray("Details");
for(int i=0;i<array.length();i++)
{
JSONObject innerObject=array.getJsonObject(i);
String s= innerObject.getString("Status");
}
如果在代码中的任何时候,org.json.JSONObject json_object
变得null
,并且您希望避免NullPointerException
(java.lang.NullPointerException),那么只需检查如下:
if(json_object == null) {
System.out.println("json_object is found as null");
}
else {
System.out.println("json_object is found as not null");
}