Volley不起作用,没有回复

时间:2018-01-31 02:45:25

标签: android android-volley

我之前在几个项目中使用了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");
  }
});

1 个答案:

答案 0 :(得分:0)

现在有效。我清理了项目,重新启动了Android Studio并重新构建。在重建之前,我还对性能调整进行了一些配置更改。