gpt4 book ai didi

java - 如何在volly类之外检索volley响应Listner的响应

转载 作者:行者123 更新时间:2023-12-02 12:01:20 25 4
gpt4 key购买 nike

我正在为我的大学做一个项目。我的 Android 应用程序需要与服务器通信以发送命令并接收一些数据。我能够发送和接收数据。问题是当我想在 volly 类之外打印该数据时,没有收到可用的数据。

final RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
StringRequest stringRequest = new StringRequest(Request.Method.GET, server_url += "/?data="+ enteredUsername.getText().toString()+","+ enteredPassword.getText().toString()+","+enteredSiteId.getText().toString(),

new Response.Listener<String>() {
@Override
public void onResponse(String response) {
returnFromServer =response.toString();
requestQueue.stop();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
commandStatus.setText("SERVER DOWN");
error.printStackTrace();
requestQueue.stop();
}
});
requestQueue.add(stringRequest);
commandStatus.setText(returnFromServer);//there is no value here out side the volly class
}

我必须比较服务器返回的值以供进一步使用。

最佳答案

在您的类中创建一个 ResponseListener 对象,如下所示:

Response.Listener<String> response = new Response.Listener<String>(){
@Override
public void onResponse(String response) {
returnFromServer =response.toString();
requestQueue.stop();
}
};

然后将监听器传递给volley:

public void yourMethod(){
....
callApi(response)
....
}

public void callAPI(Response.Listener<String> response) {
StringRequest stringRequest = new StringRequest(Request.Method.GET, server_url += "/?data="+ enteredUsername.getText().toString()+","+ enteredPassword.getText().toString()+","+enteredSiteId.getText().toString(),
response,
new Response.ErrorListener(){...}
}

实现

public class MainActivity extends Activity{

Response.Listener<String> response = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
returnFromServer =response.toString();
requestQueue.stop();
}
};

private void callAPI(Response.Listener<String> respone) {
final RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
StringRequest stringRequest = new StringRequest(Request.Method.GET, server_url += "/?data="+ enteredUsername.getText().toString()+","+ enteredPassword.getText().toString()+","+enteredSiteId.getText().toString(),
response,
, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
commandStatus.setText("SERVER DOWN");
error.printStackTrace();
requestQueue.stop();
}
});
requestQueue.add(stringRequest);
commandStatus.setText(returnFromServer);//there is no value here out side the volly class
}
}
}

只需在您想要的任何地方调用 callAPI 方法,并将响应作为参数传递即可。如果从服务器收到响应,则调用 MainActivity 中的 onResponse 方法。

  • 在同一个类中实现 Response.Listener 的另一种简单方法是调用 API 并将 volley 中的响应参数设置为 this
  • 关于java - 如何在volly类之外检索volley响应Listner的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47237484/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com