古いプロジェクトの更新を行っていますが、今のところ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アプリケーションで正常に機能しています。
これは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でテストしましたが、正常に動作します。
さらに確認したところ、protected Map<String, String> getParams() throws AuthFailureError {
が呼び出されていないことがわかりました。なぜこれが起こっているのでしょうか?
問題は次のとおりです。
_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で詳細を確認できます。
実際には500は内部サーバーエラーを意味し、これはVolleyによるものではなく、呼び出しているRest-apiが原因であるため、バックエンドコードを確認してください。