Java 希望将POST请求后收到的响应存储在可在内部类外部访问的变量中 字符串数据; RequestQueue=Volley.newRequestQueue(this); StringRequest StringRequest=新的StringRequest(Request.Method.POST,url, 新的Response.Listener(){ @凌驾 公共void onResponse(字符串响应){ 试一试{ System.out.println(响应); 数据=响应; }捕获(例外e){ e、 printStackTrace(); } } }, 新的Response.ErrorListener(){ @凌驾 公共无效onErrorResponse(截击错误){ 错误。printStackTrace(); } } ) { @凌驾 受保护的映射getParams() {//POST参数的代码 } }; 添加(stringRequest);

Java 希望将POST请求后收到的响应存储在可在内部类外部访问的变量中 字符串数据; RequestQueue=Volley.newRequestQueue(this); StringRequest StringRequest=新的StringRequest(Request.Method.POST,url, 新的Response.Listener(){ @凌驾 公共void onResponse(字符串响应){ 试一试{ System.out.println(响应); 数据=响应; }捕获(例外e){ e、 printStackTrace(); } } }, 新的Response.ErrorListener(){ @凌驾 公共无效onErrorResponse(截击错误){ 错误。printStackTrace(); } } ) { @凌驾 受保护的映射getParams() {//POST参数的代码 } }; 添加(stringRequest);,java,android,post,Java,Android,Post,我得到一个错误变量“Data”是从内部类中访问的,需要声明为final。 问题是,如果我将字符串声明为final,我会得到一个错误,即无法为final变量“Data”赋值,因为我无法在类中再次为它赋值 是否有一种方法可以将响应存储在一个字符串中,然后在类的主体之外使用它?在父类中声明字符串数据,因为您将字符串数据声明为局部变量,并尝试在方法内部访问它,这就是为什么它要求将其设置为最终值,你不能改变final variable的值,有很多方法,其中最常见的是调用一个方法 例如:- String

我得到一个错误
变量“Data”是从内部类中访问的,需要声明为final。

问题是,如果我将字符串声明为final,我会得到一个错误,即
无法为final变量“Data”赋值,因为我无法在类中再次为它赋值


是否有一种方法可以将
响应
存储在一个字符串中,然后在类的主体之外使用它?
在父类中声明
字符串数据
,因为您将
字符串数据
声明为局部变量,并尝试在方法内部访问它,这就是为什么它要求将其设置为最终值,你不能改变final variable的值,有很多方法,其中最常见的是调用一个方法

例如:-

 String Data;
 RequestQueue queue = Volley.newRequestQueue(this);
 StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try{
                        System.out.println(response);
                        Data = response;

                    } catch (Exception e){
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                }
            }
    ) {
        @Override
        protected Map<String, String> getParams()
        { //code for POST parameters
            }
    };
    queue.add(stringRequest);
公共A类{
字符串responseData=null;
公共onResponseCallMe(字符串数据){
//对这里的数据做任何你想做的事情
//喜欢保存全局变量;
响应数据=数据;
}
RequestQueue=Volley.newRequestQueue(this);
StringRequest StringRequest=新的StringRequest(Request.Method.POST,url,
新建响应。侦听器(){
@凌驾
公共void onResponse(字符串响应){
试试{
System.out.println(响应);
onResponseCallMe(响应);
}捕获(例外e){
e、 printStackTrace();
} 
} 
}, 
新响应。ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
错误。printStackTrace();
} 
} 
) { 
@凌驾
受保护的映射getParams()
{//POST参数的代码
} 
};
添加(stringRequest);
}

声明字符串数据全球。我们无法使用Final关键字为变量赋值。

在此处找到了一个有效的解决方案:


因此,使用一个独立于您的其他文件的全局类,我可以调用一些方法,这些方法可以将响应(或JSONObject)存储在一个变量中,该变量可以在所有活动中访问和操作。

为您的答案添加一些解释是的,始终。:)只是别忘了在父(外部)类中编写这个方法。我对您的解决方案有一些问题。首先,我了解到所有
StringRequest
对象都有一组特定的参数<代码>StringRequest myReq=新StringRequest(Method.POST)http://ave.bolyartech.com/params.php,createMyReqSuccessListener(),createMyReqErrorListener())
您的建议需要添加一个额外的选项,我认为这是不正确的。我不是要求您将其放入
StringRequest()
中,而是将其写入初始化
StringRequest
对象的方法中。更新了我的答案,以显示它在您的代码中的外观。不,它没有。它仍然显示出错误。但是,当我将方法放在onCreate外部时,我可以在外部访问它,但只能在方法内部访问它。而不是像我想的那样在班上的其他人身上。
public class A {
String responseData = null;
    public onResponseCallMe(String data){
      //do whatever you want to do with this data here
      // like saving to global variable;
      responseData = data;
    }
 RequestQueue queue = Volley.newRequestQueue(this); 

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, 
        new Response.Listener<String>() { 
            @Override 
            public void onResponse(String response) { 
                try{ 
                    System.out.println(response); 
                    onResponseCallMe(response);

                } catch (Exception e){ 
                    e.printStackTrace(); 
                } 
            } 
        }, 
        new Response.ErrorListener() { 
            @Override 
            public void onErrorResponse(VolleyError error) { 
                error.printStackTrace(); 
            } 
        } 
) { 
    @Override 
    protected Map<String, String> getParams()
    { //code for POST parameters 
        } 
};
queue.add(stringRequest);
}