Android : 如何从 Volley OnRequest StringRequest 方法 return JSONObject
Android : how to return JSONObject from Volley OnRequest StringRequest method
我需要通过将字符串数据赋值给 OnResponse() scpoe 之外的另一个方法来传递响应字符串,这样我就可以通过调用该方法从中 return 一个 JSONObject,但它总是 returns null
我只需要从 Volley stringrequest 获取 JSONObject,因为响应是 xml "
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">........</string>
这是我的代码
static String data;
private void driverByIdStringRequest(int ID,final Context context){
RequestQueue queue = VolleySingleton.getInstance(context.getApplicationContext()).getRequestQueue();
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url+ID,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
response = response.replaceAll("<?xml version=\"1.0\" encoding=\"utf-8\"?>", "");
response = response.replaceAll("<string xmlns=\"http://tempuri.org/\">", "");
response = response.replaceAll("</string>", "");
String data = response.substring(40);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error : ", error.toString());
}
});
VolleySingleton.getInstance(context).addToRequestQueue(stringRequest);
}
public JSONObject GetDriverById(int ID,Context context){
driverByIdStringRequest(ID, context);
JSONObject json = JSONObject(data);
return json;
}
最好的可维护方法是首先用解析器XML解析你。
只需关注this tutorial官方文档即可。
获得字符串后,您只需要做
JSONObject mainObject = new JSONObject(Your_Sring_data);
(Android studio 会提示您在 JSON 创作周围放置正确的 try/catch。)
如果您的 StringRequest 的字符串响应始终具有以下格式:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">........</string>
其中........
就是你想要得到的JSONObject
,我建议你按照下面的方式处理String reponse:
...
String jsonString = stringResponse;
jsonString = jsonString.replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>"," ");
jsonString = jsonString.replace("<string xmlns=\"tempuri.org/\">"," ");
jsonString = jsonString.replace("</string>"," ");
try {
JSONObject jsonObject = new JSONObject(jsonString);
} catch (JSONException e) {
e.printStackTrace();
}
...
回到你的代码,data
当然是 NULL,因为 JSONObject json = JSONObject(data);
在 onResponse
之前调用了请求。我建议你参考我在以下问题的回答来解决你的问题:
希望对您有所帮助!
我需要通过将字符串数据赋值给 OnResponse() scpoe 之外的另一个方法来传递响应字符串,这样我就可以通过调用该方法从中 return 一个 JSONObject,但它总是 returns null
我只需要从 Volley stringrequest 获取 JSONObject,因为响应是 xml "
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">........</string>
这是我的代码
static String data;
private void driverByIdStringRequest(int ID,final Context context){
RequestQueue queue = VolleySingleton.getInstance(context.getApplicationContext()).getRequestQueue();
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url+ID,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
response = response.replaceAll("<?xml version=\"1.0\" encoding=\"utf-8\"?>", "");
response = response.replaceAll("<string xmlns=\"http://tempuri.org/\">", "");
response = response.replaceAll("</string>", "");
String data = response.substring(40);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Error : ", error.toString());
}
});
VolleySingleton.getInstance(context).addToRequestQueue(stringRequest);
}
public JSONObject GetDriverById(int ID,Context context){
driverByIdStringRequest(ID, context);
JSONObject json = JSONObject(data);
return json;
}
最好的可维护方法是首先用解析器XML解析你。
只需关注this tutorial官方文档即可。
获得字符串后,您只需要做
JSONObject mainObject = new JSONObject(Your_Sring_data);
(Android studio 会提示您在 JSON 创作周围放置正确的 try/catch。)
如果您的 StringRequest 的字符串响应始终具有以下格式:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">........</string>
其中........
就是你想要得到的JSONObject
,我建议你按照下面的方式处理String reponse:
...
String jsonString = stringResponse;
jsonString = jsonString.replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>"," ");
jsonString = jsonString.replace("<string xmlns=\"tempuri.org/\">"," ");
jsonString = jsonString.replace("</string>"," ");
try {
JSONObject jsonObject = new JSONObject(jsonString);
} catch (JSONException e) {
e.printStackTrace();
}
...
回到你的代码,data
当然是 NULL,因为 JSONObject json = JSONObject(data);
在 onResponse
之前调用了请求。我建议你参考我在以下问题的回答来解决你的问题:
希望对您有所帮助!