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);
}