[英]Return a string from an anonymous class
我有一个android项目,其中使用类通过Volley库发送http请求。 它称为WebServicesAdapter
。 我在其中使用了回调以将值返回给被调用的活动,但是由于上下文中的某些问题,它阻止了新活动的启动。 如何在不使用回调的情况下返回字符串?
下面是我的代码。 successcallback
是当我想返回一个字符串时的回调。
public class WebServiceAdapter {
private static String BASE_URI = "http://192.168.42.94/getvoize/index.php";
private RequestQueue rQueue;
public String responseString;
public String status;
Context context;
public WebServiceAdapter(Context context){
this.context = context;
status = "new";
rQueue = Volley.newRequestQueue(context);
}
private WebServiceInterface wsi;
public void sendGetRequest(String page,Map<String,String> map, WebServiceInterface i){
wsi = i;
String query = "";
if(!map.isEmpty()){
for (Map.Entry<String, String> entry : map.entrySet())
{
query =query + entry.getKey()+"="+entry.getValue()+'&';
}
}
if(query.length() != 0)
query = query.substring(0,query.length()-1);
StringRequest sRequest = new StringRequest(Request.Method.GET,BASE_URI+page+"?"+query,
new Response.Listener<String>() {
@Override
public void onResponse(String response){
wsi.successCallback(response,context);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error){
wsi.errorCallback("failed",context);
}
});
rQueue.add(sRequest);
}
private Map<String,String> parameter;
private Map<String,String> headers;
public void sendPostRequest(String page,Map<String,String> body,Map<String,String> header,WebServiceInterface i){
wsi = i;
parameter = body;
headers = header;
Log.d("place", "Inpost");
StringRequest myReq = new StringRequest(Request.Method.POST,
BASE_URI+page,
new Response.Listener<String>() {
@Override
public void onResponse(String response){
wsi.successCallback(response, context);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error){
wsi.errorCallback("Failed", context);
}
}
) {
@Override
protected Map<String,String> getParams(){
Map<String,String> params = parameter;
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> params = headers;
return params;
}
};
rQueue.add(myReq);
}
您尚未在尝试开始新活动的地方张贴活动代码。 如果您可以在此处与错误日志(如果有的话)共享该部分,将很有帮助。
如果您试图从调用的Activity中的回调启动一个Activity,请记住在Main Thread中进行此操作(假定从非主线程调用了Web服务)。
值得一提的其他输入是-从回调到活动,不需要将上下文传递回去。 它可以随时在活动中使用。
您可以使用以下代码:
runOnUiThread(new Runnable() {
public void run() {
//startActivity code here.
}
});
定义您的回调接口(我假设您已经有这个接口,并且WebServiceInterface
是回调接口)。
您的Activity
应实现此接口。
将参数WebServiceInterface
添加到WebServiceAdapter
构造函数。 构造函数应将此存储在私有成员变量中。
当您的Activity
创建WebServiceAdapter
的实例时,应将this
作为WebServiceInterface
参数传递。
如果您想回调Activity
,只需对存储的私有成员变量进行调用即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.