我之前在几个项目中使用了Volley,一切正常。我有一个基于本教程的非常小的样本测试项目,它可以工作,但是在这个项目中(主要由其他人编码)当我向它添加Volley时它不起作用。调用getParams,这意味着队列没问题,但没有调用响应方法。然后我故意删除了INTERNET权限。我期望logcat中有一个权限异常,但它并没有发生。我的日志留在了getParams。似乎在getParams之后,Volley默默地死了,没有任何错误,没有回归。谁看过这个吗?代码非常简单,几乎遵循教程使用新的RequestQueue(上下文),相同的代码在其他地方工作。所有测试均在同一测试设备上完成。
这是我使用的版本。 实施' com.android.volley:volley:1.1.0'
import android.app.Application;
import android.content.Context;
import android.net.Uri;
import android.util.Log;
import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.mapswithme.maps.mrf.VolleyCallback;
import java.util.HashMap;
import java.util.Map;
public class NetRequest {
private static NetRequest myObj;
private RequestQueue mRequestQueue;
/**
* Create private constructor
*/
private NetRequest(){
}
/**
* Create a static method to get instance.
*/
public static NetRequest getInstance(){
if(myObj == null){
myObj = new NetRequest();
}
return myObj;
}
public void networkStringRequest(Context context, String url, final Map<String, String> param, final VolleyCallback callback, int timeout_ms, int max_retry, float backoff)
{
StringRequest strReq = new StringRequest(Request.Method.POST,
url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("test", "Volley returned");
callback.onSuccess(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("test", "Volley error response");
callback.onFailed(error.toString());
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Log.i("test", "get param");
if (param == null)
return new HashMap<String, String>();
return param;
}
};
strReq.setRetryPolicy(new DefaultRetryPolicy(
timeout_ms,
max_retry,
backoff));
if (mRequestQueue==null) {
//make sure we are using application context
Context ctx;
if (context instanceof Application) {
ctx = context;
}
else
ctx = context.getApplicationContext();
Log.i("test", "new request queue");
mRequestQueue = Volley.newRequestQueue(ctx);
}
Log.i("test", "add to request queue");
mRequestQueue.add(strReq);
}
public void networkStringRequest(Context context, String url, Map<String, String> param, final VolleyCallback callback)
{
networkStringRequest(context, url, param, callback, DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
}
}
在另一个档案中:
public interface VolleyCallback {
void onSuccess(String result);
void onFailed(String result);
}
在主要活动中:
String url = "http://httpbin.org/post";
HashMap<String, String> param = new HashMap<String, String>();
param.put("test", "test");
NetRequest.getInstance().networkStringRequest(getApplicationContext(), url, param, new VolleyCallback() {
@Override
public void onSuccess(String result) {
Log.i("test", "success net");
}
@Override
public void onFailed(String result) {
Log.i("test", "failed net");
}
});
答案 0 :(得分:0)
现在有效。我清理了项目,重新启动了Android Studio并重新构建。在重建之前,我还对性能调整进行了一些配置更改。