没有互联网访问时,Volley onErrorResponse不起作用

时间:2016-10-19 18:17:59

标签: android android-volley

我有一个功能getTeacherData() 并且它返回json object,问题是当我在我的手机上禁用我的互联网连接应用程序崩溃时(android没有在android监视器中显示错误,它只是在没有显示错误的情况下崩溃), 当我在我的模拟器上运行相同的应用程序时,它工作正常,如果我断开我的互联网,onErrorResponse也可以工作,但当我在其他手机上运行它时崩溃

private void getTeacherData() {

    if (username.equals("")) {
        Toast.makeText(this, "Please enter an id", Toast.LENGTH_LONG).show();
        return;
    }
        String url = DATA_URL+username;

        StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                showJSON(response);
            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(cardview.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
                    }
                });

       RequestQueue requestQueue = Volley.newRequestQueue(this);
       requestQueue.add(stringRequest);
}

private void showJSON(String response){
    try {
        JSONObject jsonObject =new JSONObject(response);
        JSONArray result = jsonObject.getJSONArray(config.JSON_ARRAY);
        for(int x=0;x<result.length();x++) {

            JSONObject collegeData = result.getJSONObject(x);
            albumList.add(new Album(collegeData.getString(config.course_name),collegeData.getString(config.semester)
                    ,collegeData.getString(config.section),collegeData.getString(config.total_classes)
                    ,collegeData.getString(config.subject),collegeData.getString(config.classes_taken),collegeData.getString(config.subject_code)));
            adapter.notifyDataSetChanged();
        }
    } catch (JSONException e) {

        e.printStackTrace();
    }

}

我尝试过的事情:

  1. 已移除showJSON(); onResponse()内的方法。
  2. 使用try catch包围字符串请求。
  3. 使用getTeacherData() try包围整个catch

1 个答案:

答案 0 :(得分:1)

似乎onErrorResponse在少数设备上的响应方式不同

onErrorResponse在少数设备上返回null(这是崩溃的原因)

      new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                        if(error.getMessage==NULL){
      Toast.makeText(cardview.this, "Failed to retrieve data", Toast.LENGTH_LONG).show();
                        }
                    else{
                            Toast.makeText(cardview.this, error.getMessage().toString(), Toast.LENGTH_LONG).show();
                        }

                    });