android volley中的NoConnectionError

时间:2015-06-18 11:41:03

标签: android android-volley android-networking

以下是我的代码。我第一次得到 com.android.volley.NoConnectionError:java.io.InterruptedIOException ,第二次它正常工作。服务器响应也很好,服务器端没有错误。

RequestQueue queue = Volley.newRequestQueue(MainActivity.this);

    JsonObjectRequest request = new JsonObjectRequest(URL, null,
            new Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject responseJsonObject) {
                    try {
                        if (responseJsonObject.has("user")
                                && !responseJsonObject
                                        .isNull("user")) {
                                user.jsonParser(responseJsonObject
                                    .getJSONObject("user"));
                        }
                    } catch (JSONException exception) {
                        Toast.makeText(context, "Error Occured",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            }, new ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    progressDialog.dismiss();
                    Log.d("Volley Error", volleyError.toString());
                    Toast.makeText(context, "Connectivity Error",
                            Toast.LENGTH_SHORT).show();
                }
            });

    queue.add(request);
    progressDialog.show();
    queue.start();

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。问题Vamsi referenced有一个使用OkHttp的解决方法,如果你使用OkHttp作为排序中的堆栈,你可以使用OkHttp(另请参阅该问题中的注释on how to use OkHttp in volley)。

但是,这是另一个不涉及使用其他库的hacky解决方法:

final RequestQueue requestQueue = getRequestQueue();

final class ErrorFirstTimeHack {
    boolean first_time = true;
    MyVolleyJsonObjectRequest request = null;
}
final ErrorFirstTimeHack errorFirstTimeHack = new ErrorFirstTimeHack();
final MyVolleyJsonObjectRequest request = buildRequestObject(
    Request.Method.GET,
    url,
    new Response.Listener() {
        @Override
        public void onResponse(Object response) {
            // normal success processing
        }
    },
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            if (error instanceof com.android.volley.NoConnectionError) {
                if (errorFirstTimeHack.first_time) {
                    errorFirstTimeHack.first_time = false;
                    requestQueue.add(errorFirstTimeHack.request);
                    return;
                }
            }
            // normal error processing
        }
    }
);
errorFirstTimeHack.request = request;
requestQueue.add(request);

答案 1 :(得分:0)

我遇到了同样的问题,我通过删除以下行来解决了该问题

queue.start()