【问题标题】:Android Volley: BasicNetwork.performRequest: Unexpected response code 404Android Volley:BasicNetwork.performRequest:意外响应代码 404
【发布时间】:2017-04-06 17:48:30
【问题描述】:

我想从数据库中获取用户的信息并显示出来,但是我一直收到这个错误:

BasicNetwork.performRequest:意外响应代码 404

这是我的java代码:

加载方式:

public void loadUserProfile() {

    Response.Listener<String> responseListener = new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONObject jsonResponse = new JSONObject(response);
                idTV.setText(jsonResponse.getString("_id"));
                nameTV.setText(jsonResponse.getString("name"));
                firstNameTV.setText(jsonResponse.getString("firstName"));
                emailTV.setText(jsonResponse.getString("email"));
                sexTV.setText(jsonResponse.getString("sex"));
                yearTV.setText(jsonResponse.getString("year"));
                cursusTV.setText(jsonResponse.getString("cursus"));
            } catch (JSONException e) {
                onLoadProfileFail();
            }
        }
    };
    ProfileRequest profileRequest = new ProfileRequest(user_id, responseListener);
    RequestQueue queue = Volley.newRequestQueue(ProfileActivity.this);
    queue.add(profileRequest);
}

请求类

class ProfileRequest extends StringRequest {
    private static final String USER_PROFILE_REQUEST = "http://[ipaddress]:8080/users/:id";
    private Map<String, String> params;

    public ProfileRequest(String id, Response.Listener<String> listener) {
        super(Method.POST, USER_PROFILE_REQUEST, listener, null);
        params = new HashMap<>();
        params.put("id", id);
    }

    @Override
    public Map<String, String> getParams() {
        return params;
    }
}

app.js

router.get('/users/:id', function(req, res) {
    User.find({ _id: "ie00847" }, function(err, user) {
      if (err)
          res.send(err);
      res.json(user);
    });
});

【问题讨论】:

    标签: java android json android-volley


    【解决方案1】:

    您收到 404 错误,因为您正在使用不可用的方法 (POST) 访问路由,因为在 app.js 文件中您为 get 请求而不是 POST 请求定义了一个函数,因此您需要将 Android 代码更新为 GET 请求。像下面这样,

    class ProfileRequest extends StringRequest {
        private static final String USER_PROFILE_REQUEST = "http://[ipaddress]:8080/users";
        private Map<String, String> params;
    
        public ProfileRequest(String id, Response.Listener<String> listener) {
            super(Method.GET, USER_PROFILE_REQUEST + "/" + id, listener, null);
        }
    }
    

    还请注意,由于您不再发送 POST 请求,因此无需覆盖 getParams() 方法。此外,您无法将参数添加到 GET 请求,除非通过硬编码 URL 中的值而不是通过 Map 对象。

    希望这会有所帮助:)

    【讨论】:

      【解决方案2】:

      您可以使用此代码解决它

      public void onErrorResponse(VolleyError error) {
      
                          NetworkResponse response = error.networkResponse;
                          if (response != null && response.statusCode == 404) {
                              try {
                                  String res = new String(response.data,
                                          HttpHeaderParser.parseCharset(response.headers, "utf-8"));
                                  // Now you can use any deserializer to make sense of data
                                  JSONObject obj = new JSONObject(res);
                                  //use this json as you want
                              } catch (UnsupportedEncodingException e1) {
                                  // Couldn't properly decode data to string
                                  e1.printStackTrace();
                              } catch (JSONException e2) {
                                  // returned data is not JSONObject?
                                  e2.printStackTrace();
                              }
                          }
                      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-10
        • 2015-06-09
        • 1970-01-01
        • 2020-03-09
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        相关资源
        最近更新 更多