Неожиданный код ответа 500 для метода POST

Я делаю обновление старого проекта, и на данный момент у меня мало знаний об 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 { не вызван. Любая идея, почему это происходит?

Ответ 1

Проблема ниже.

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>() {
    ^^^^^^^^^^^^^^^^^^^^^^

Скопировать код из protected Map<String, String> getParams() до final JsonObjectRequest.

Что это!!!

Причина такова, как показано ниже.

JsonObjectRequest расширен JsonRequest, который переопределяет метод getBody() напрямую, поэтому ваш getParam() никогда не будет вызывать, я рекомендую вам расширить StringRequest вместо JsonObjectRequest.

вы можете проверить этот ответ для получения более подробной информации.

Ответ 2

На самом деле 500 означает "Внутренняя ошибка сервера", и это вызвано тем, что вы вызываете Rest-API, а не из-за Volley, поэтому проверьте код сервера.

Ответ 3

Проверьте ваше значение маленькой заглавной буквы, ваш сервер, формат которого принимает значение с вашей стороны.

Ответ 4

Попробуйте изменить разрешение файла php на 755.