Volley JsonObjectRequest 响应
Volley JsonObjectRequest response
我正在通过 JSON 使用 Volley
JSONObjectRequest
从我的服务器检索数据来实现这一点。获得 JSON 响应后,我想将其保存到一个变量中并在 activity 期间使用它。下面是我的代码示例:
private String description;
private int status;
private boolean validateIntegrationCode() {
if (checkNetwork()) {
String url = "sample url";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
status = response.getInt("status");// ** STATUS IS 1 HERE **
description = response.getString("description");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mQueue.add(request);
} else {
// No network, check from SQLite
}
if (status == 1) { // ** STATUS IS 0 HERE **
return true;
} else {
return false;
}
}
当我在返回 true
或 false
之前检查 status
值时,status
的值现在是 0 而 description
也是 returns null
.
我的 JSON 回复:
{"status":1,"description":"Integration code is valid"}
您应该将状态声明为 int
而不是 String
.
private int status=0;
你可以这样试试
status = response.getInt("status");
description = response.getString("description");
if (status == 1) {
checkingStatus(status);
} else {
checkingStatus(status);
}
然后
public void checkingStatus(int status){
if(status == 1){
// do your code
}else{
// do your code
}
}
凌空请求是一个异步调用。在收到响应之前,它不会阻止代码。所以发生的事情是在收到齐射响应之前发生了对 if(status==1)
的检查。因此它是 0。
你应该做什么:
1) 使您的函数 return 类型无效。
2) 在onResponse
中输入代码
if (status == 1) { // ** STATUS IS 0 HERE **
statusBoolean = true;
} else {
statusBoolean = false;
}
我已经更新了我的答案如下,
private int status;
private String description;
private void callRequest() {
// Initialize a new RequestQueue instance
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
// Initialize a new JsonObjectRequest instance
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET,
"URL",
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
status = response.getInt("status");// ** STATUS IS 1 HERE **
description = response.getString("description");
checkStatus();
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}
);
// Add JsonObjectRequest to the RequestQueue
requestQueue.add(jsonObjectRequest);
}
private void checkStatus(){
if(status == 1){
// do what do you need to do id status == 1
}else{
// do what do you need to do id status == 0
}
}
试试这个,让我知道更新
谢谢!
我正在通过 JSON 使用 Volley
JSONObjectRequest
从我的服务器检索数据来实现这一点。获得 JSON 响应后,我想将其保存到一个变量中并在 activity 期间使用它。下面是我的代码示例:
private String description;
private int status;
private boolean validateIntegrationCode() {
if (checkNetwork()) {
String url = "sample url";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
status = response.getInt("status");// ** STATUS IS 1 HERE **
description = response.getString("description");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mQueue.add(request);
} else {
// No network, check from SQLite
}
if (status == 1) { // ** STATUS IS 0 HERE **
return true;
} else {
return false;
}
}
当我在返回 true
或 false
之前检查 status
值时,status
的值现在是 0 而 description
也是 returns null
.
我的 JSON 回复:
{"status":1,"description":"Integration code is valid"}
您应该将状态声明为 int
而不是 String
.
private int status=0;
你可以这样试试
status = response.getInt("status");
description = response.getString("description");
if (status == 1) {
checkingStatus(status);
} else {
checkingStatus(status);
}
然后
public void checkingStatus(int status){
if(status == 1){
// do your code
}else{
// do your code
}
}
凌空请求是一个异步调用。在收到响应之前,它不会阻止代码。所以发生的事情是在收到齐射响应之前发生了对 if(status==1)
的检查。因此它是 0。
你应该做什么:
1) 使您的函数 return 类型无效。
2) 在onResponse
中输入代码
if (status == 1) { // ** STATUS IS 0 HERE **
statusBoolean = true;
} else {
statusBoolean = false;
}
我已经更新了我的答案如下,
private int status;
private String description;
private void callRequest() {
// Initialize a new RequestQueue instance
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
// Initialize a new JsonObjectRequest instance
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET,
"URL",
null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
status = response.getInt("status");// ** STATUS IS 1 HERE **
description = response.getString("description");
checkStatus();
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}
);
// Add JsonObjectRequest to the RequestQueue
requestQueue.add(jsonObjectRequest);
}
private void checkStatus(){
if(status == 1){
// do what do you need to do id status == 1
}else{
// do what do you need to do id status == 0
}
}
试试这个,让我知道更新 谢谢!