我正在努力使用另一个类中的JSON对象..我目前有:
public String URL;
public JSONObject ResultArray;
public StackTraceElement[] Error;
public void ExecJSONRequest(){
JSONObject json = null;
String str = "";
HttpResponse response;
HttpClient myClient = new DefaultHttpClient();
HttpPost myConnection = new HttpPost(this.URL);
try {
response = myClient.execute(myConnection);
str = EntityUtils.toString(response.getEntity(), "UTF-8");
// Look for Errors
} catch (ClientProtocolException e) {
this.Error = e.getStackTrace();
} catch (IOException e) {
this.Error = e.getStackTrace();
}
try {
// Get Results from URL & Populate for return
JSONArray jArray = new JSONArray(str);
json = jArray.getJSONObject(0);
this.ResultArray = json;
// Look for Errors
} catch (JSONException e) {
this.Error = e.getStackTrace();
}
}
这是我的JSON执行类(基本我知道),
我正在尝试在我的主要活动中使用ResultArray
:
TextView url = (TextView) findViewById(R.id.url);
JSONQuery JSONQ = new JSONQuery();
JSONQ.URL = "192.168.0.12/Testing/index.php";
JSONQ.ExecJSONRequest();
JSONObject Obj = JSONQ.ResultArray;
url.setText(Obj.getString("url"));
Android Studio正在报告未处理的JSON异常。
使用try / catch块:
try {
JSONQuery JSONQ = new JSONQuery();
JSONQ.URL = "192.168.0.12/Testing/index.php";
JSONQ.ExecJSONRequest();
JSONObject Obj = JSONQ.ResultArray;
url.setText(Obj.getString("url"));
}catch(Exception E){
E.printStackTrace();
}
删除此错误,但我的字段未填充?
更新。使用:
// Get Results from URL & Populate for return
JSONArray jArray = new JSONArray(str);
json = jArray.getJSONObject(0);
//this.ResultArray = json;
json.getString("url");
我的JSONQuery类中的返回预期的结果(当分配给文本字段时)
答案 0 :(得分:1)
你只需要尝试&抓住这行代码
url.setText(Obj.getString("url"));
因为如果没有“url”键的映射字符串,org.json.JSONObject#getString
将抛出JSONException
。
或者,您可以使用org.json.JSONObject#optString(java.lang.String)
代替。如果不存在这样的映射,它不会抛出JSONException
并返回空字符串。