【问题标题】:Volley status code and message return on jsonobjectrequest and jsonarrayrequestjsonobjectrequest 和 jsonarrayrequest 上的 Volley 状态代码和消息返回
【发布时间】:2015-06-04 18:25:13
【问题描述】:

我正在使用 Volley 来访问 REST API。我的大多数调用都返回 200,如果它返回 400、401 或 409,我会返回一个 json 响应,其中包含不同的错误消息,说明出了什么问题。我一直在查看 parseNetworkRequest,但我并没有真正理解它。

这是我的 JsonArrayRequest。它只应该返回一个状态码。没有消息,大概会改成在400或者401上加一条json消息

    JsonArrayRequest postVerification = new JsonArrayRequest(url,amountArray,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                realm = Realm.getInstance(getApplicationContext());
                realm.executeTransaction(new Realm.Transaction() {
                    @Override
                    public void execute(Realm realm) {
                        realm.where(AccountsModel.class).beginsWith("actId", accountId).findFirst().setActverified("true");
                    }
                });
                dismissDialog();
                updateView();                    }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.i("error", "Error: " + error.getMessage());
            dismissDialog();
            Toast message = Toast.makeText(getApplicationContext(),"Unable to verify account at this time", Toast.LENGTH_SHORT);
             message.show();
        }
    }) {

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/json");
            Log.i("Auth", "Bearer " + NetworkEngine.access_token);
            headers.put("Authorization", auth);
            return headers;
        }

        @Override
        public int getMethod() {
            return Method.POST;
        }
        @Override
        protected Response<T> parseNetworkResponse(
                NetworkResponse response) {
            try {
                String json = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers));
                return Response.success(json,),
                        HttpHeaderParser.parseCacheHeaders(response));
            } catch(Exception e){}

        }
    };

我在 parseNetworkResponse 行有一个错误

error: cannot find symbol
        protected Response<T> parseNetworkResponse(

当我将鼠标悬停在响应上时,它说它正在尝试使用不兼容的返回类型。我真的不知道从这里做什么。不确定在 Response.sucess() 中放置什么或如何实际获取状态码。任何帮助将不胜感激。

【问题讨论】:

  • 这篇文章应该会有所帮助:stackoverflow.com/questions/21867929/…
  • 抱歉,Volley 一直在努力让一切正常运行当我提出请求时,我通过 GsonRequest variableName = new GsonRequest(url, class,headers, new Response.Listener , new Response.ErrorListener){} Response.Listener 有一个错误方法“从监听器派生的匿名类”必须在“监听器”中声明为抽象或实现抽象“onResponse”另外,我将如何覆盖它并添加一个消息正文使其成为发布请求?我很确定我让它接受我传递给它的任何方法,有点我不知道如何将正文部分添加到它。

标签: android android-volley


【解决方案1】:
  • 要从 JsonArrayRequest 获取状态代码,请尝试以下操作。希望对您有所帮助。

    @覆盖 受保护的响应解析网络响应(网络响应响应){ mStatusCode = response.statusCode; 返回 super.parseNetworkResponse(response); }

【讨论】:

    【解决方案2】:

    不确定您要做什么,但如果您只想获取状态代码,您可以使用 HttpClient。

    public JSONArray getJSONFromUrl(String url) {
        StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {
            HttpResponse response = client.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                String line;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
            } else {
                Log.e("==>", "Failed to download file");
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // Parse String to JSON object
        JSONArray jarray =null;
        try {
            jarray = new JSONArray(builder.toString());
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        } 
        return jarray;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多