web-dev-qa-db-ja.com

POSTメソッドの予期しない応答コード500

古いプロジェクトの更新を行っていますが、今のところAndroidの知識はあまりありません。プロジェクトには、製品に関するコメントセクションがあります。

前に送信した後のコメントについては、0(エラー)および1(成功)として返されました。

以下は、使用していたコードです。

_final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Method.POST,
    act.getString(R.string.CommentForUserURL),
    null, new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(
            JSONObject response) {

        Log.d("response done", "done===" + response);

        mloading.setVisibility(View.GONE);
        if (response != null) {
            Comment obj = new Comment();
            JSONObject jsonObject = response;
            try {
                obj.setComment(jsonObject
                        .getString("Comment"));
_

ここで、戻りオブジェクトを0/1からユーザーオブジェクトに変更しました。

これには、JsonObjectRequestをGJSON要求に更新する必要がありますか?または、オブジェクトもJsonObjectRequestで解析されますか?

上記を実行すると、次のようなエラーが発生するため、私は尋ねています。

_01-25 12:30:21.754: E/Volley(16487): [10114] BasicNetwork.performRequest: 
Unexpected response code 500 for 
http://new.souqalharim.com/add/CommentForMerchant
_

このエラーが発生する理由は何ですか?

注:このURLはiPhoneアプリケーションで正常に機能しています。


編集1

これはpostメソッドなので、完全なURLはありません。 ?comment = MyComment&userId = 123&productId = 234のように、追加するパラメーターがいくつかあります。投稿なので、実際のURLにパラメーターを追加していません。

私は別の方法でそれらを持っています

_@Override
protected Map<String, String> getParams()
        throws AuthFailureError {
    Map<String, String> params = new HashMap<String, String>();
    params.put("productId", productId.toString());
    params.put("userId",
            mSessionManager.getUserCode().toString());
    params.put("comment", GlobalFunctions
            .EncodeParameter(med_comments
                    .getText().toString()));



    return params;
}
_

完全なURLは次のとおりです。

http://new.souqalharim.com/add/CommentForUser?productId=325&userId=5&comment=abcd

これをMozilla RESTClientでテストしましたが、正常に動作します。


編集2

さらに確認したところ、protected Map<String, String> getParams() throws AuthFailureError {が呼び出されていないことがわかりました。なぜこれが起こっているのでしょうか?

12
user3102156

問題は次のとおりです。

_final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Method.POST,
    act.getString(R.string.CommentForUserURL),
    null, new Response.Listener<JSONObject>() {
    ^^^^
_

そのはず

_final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
    Method.POST,
    act.getString(R.string.CommentForUserURL),
    new JSONObject(params), new Response.Listener<JSONObject>() {
    ^^^^^^^^^^^^^^^^^^^^^^
_

_final JsonObjectRequest_の前にprotected Map<String, String> getParams()からコードをコピーします。

それでおしまい!!!

理由は以下の通りです。

JsonObjectRequestは拡張されます JsonRequest これはgetBody()メソッドを直接オーバーライドするため、getParam()は呼び出されません。JsonObjectRequestの代わりにStringRequestを拡張することをお勧めします。

this answerで詳細を確認できます。

9
Fahim Parkar

実際には500は内部サーバーエラーを意味し、これはVolleyによるものではなく、呼び出しているRest-apiが原因であるため、バックエンドコードを確認してください。

6
Arunmani