Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在volly课堂外检索volly应答者的应答_Java_Android_Android Volley - Fatal编程技术网

Java 如何在volly课堂外检索volly应答者的应答

Java 如何在volly课堂外检索volly应答者的应答,java,android,android-volley,Java,Android,Android Volley,我正在为我的大学做一个项目。我的android应用程序需要与服务器通信才能发送命令并接收一些数据。我能够发送和接收数据。问题是,当我想将该数据打印到volly类之外时,没有可用的接收数据 final RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); StringRequest stringRequest = new StringRequest(Request.Method.GET, ser

我正在为我的大学做一个项目。我的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
    }
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.Listener(){
@凌驾
公共void onResponse(字符串响应){
returnFromServer=response.toString();
requestQueue.stop();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
commandStatus.setText(“服务器关闭”);
错误。printStackTrace();
requestQueue.stop();
}
});
添加(stringRequest);
commandStatus.setText(returnFromServer)//在volly类之外没有任何价值
}

我必须比较服务器返回的值,以便进一步使用。在类中创建一个ResponseListener对象,如下所示:

Response.Listener<String> response = new Response.Listener<String>(){
    @Override
            public void onResponse(String response) {
                returnFromServer =response.toString();
                requestQueue.stop();
            }
};
Response.Listener Response=newresponse.Listener(){
@凌驾
公共void onResponse(字符串响应){
returnFromServer=response.toString();
requestQueue.stop();
}
};
然后让听者截击:

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方法(){
....
callApi(响应)
....
}
public void callAPI(Response.Listener Response){
StringRequest StringRequest=new StringRequest(Request.Method.GET,server_url++=“/?data=“+enteredUsername.getText().toString()+”,“+enteredPassword.getText().toString()+”,“+enteredSiteId.getText().toString(),”,
答复,,
新响应。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
        }
    }
}
公共类MainActivity扩展活动{
Response.Listener Response=新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
returnFromServer=response.toString();
requestQueue.stop();
}
};
私有void调用API(Response.Listener 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(),”,
答复,,
,new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
commandStatus.setText(“服务器关闭”);
错误。printStackTrace();
requestQueue.stop();
}
});
添加(stringRequest);
commandStatus.setText(returnFromServer);//在volly类之外没有任何值
}
}
}
只要在任何地方调用callAPI方法,并将响应作为参数传递。如果从服务器接收到响应,则调用MainActivity中的onResponse方法

  • 实现响应的另一种简单方法。在同一个类中调用API并在截图中将响应参数设置为
    this

  • @SojibAhmed我更新了我的答案,但如果您想要更多的实现,请首先查看java中的接口设计模式,以了解接口和回调是如何工作的。