ボレーライブラリを使用してネットワークリクエストを作成しているときにこのエラーが発生します。これらのリンクをたどります Android Volley-BasicNetwork.performRequest:Unexpected response code 4 and nexpected response code 404 volley しかし、私の場合はどれも機能していません。これが私のリクエストコードです
StringRequest stringRequest = new StringRequest(Request.Method.POST,AppConstants.LOG_IN_API , new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", "Login Response: " + response.toString());
try {
JSONObject jsonObject = new JSONObject(response);
Log.v("USerid",""+jsonObject.getInt("userid"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
System.out.println("volley Error ................."+volleyError);
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Log.v("getparams","Is called");
Map<String, String> params = new HashMap<String, String>();
params.put(AppConstants.USER_ID, "[email protected]");
params.put(AppConstants.PASSWORD, "123456");
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Content-Type", "application/json; charset=utf-8");
return headers;
}
};
Log.v("Request",""+stringRequest);
AppController.getInstance().addToRequestQueue(stringRequest);
}
私のコードのどこが間違っているのか教えてくれる人はいますか?どんな助けもありがたいです。
通常、この応答は、URLで誤ったパラメーターを送信することによって発生します。スペルを使用してすべてのパラメーターを確認し、応答が文字列で取得されたかオブジェクトで取得されたかを確認してください。 Content-typeも確認してください。
これがお役に立てば幸いです。
ありがとうございました。
GETが機能していてPOST=が機能していない場合、404応答が返されます。これは、投稿リクエストをサーバーがルーティングできないことを意味します。同じ問題があり、解決策は簡単でした。I NodeJSでサーバーを作成しました処理しませんでしたPOST自分のURLに対するアクション。getでテストしてみましたが、すべて問題ありませんでした。
Expressを使用したノードサーバーでの私のテスト方法は次のとおりです。
app.get('/data/helloWorld', routeData.helloWorld);
そしてもちろんpostメソッドのルートを追加する必要があります。
app.post('/data/helloWorld', routeData.helloWorld);
StringRequestのローカルIPが間違っている可能性があります。確認してください。IPを変更して問題を解決しました。
私のIPは:
private static final String ROOT_URL="http://192.168.0.101/Android/functions";
public static final String URL_REGISTER = ROOT_URL+"/registerUser.php";
後で、エミュレータとブラウザにこのIPを貼り付けると、機能しないことがわかりました。私はこの問題に一日中行き詰っていました。次に、ルートフォルダー「Android」をIPから削除し、正常に機能しました。
だから私のIPは今です:(削除されたAndroidフォルダ)
private static final String ROOT_URL="http://192.168.0.101/functions";
public static final String URL_REGISTER = ROOT_URL+"/registerUser.php";
IPはブラウザとエミュレータの両方で機能している必要があることに注意してください。その場合は、プロジェクトでそのIPを使用します。
getHeaders()
を削除すると、問題が解決しました。
誤って、POSTの代わりにGETリクエストを入れましたが、それを変更して、404応答の問題を解決しました。
このコードでAPIを試して、応答を確認してください。
StringRequest stringRequest = new StringRequest(Request.Method.POST, ApiURL.LOGIN_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("Response", response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Response", error.toString());
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("email", email.getText().toString());
params.put("password", password.getText().toString());
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/x-www-form-urlencoded");
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}