POST方法的意外响应代码500

时间:2015-01-25 09:32:24

标签: android json android-volley

我正在对旧项目进行更新&到目前为止,我对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

我知道为什么会收到此错误?

注意:此网址适用于iPhone应用程序。


编辑1

这是post方法,所以没有完整的url。还有更多参数需要添加,例如:comment = MyComment&amp; userId = 123&amp; productId = 234。由于它是帖子,我不是在实际网址中添加参数。

我有其他方法

@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;
}

完整网址如下。

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

我在Mozilla RESTClient中对此进行了测试,效果很好。


编辑2

进一步检查后发现protected Map<String, String> getParams() throws AuthFailureError {未被调用。知道为什么会这样吗?

4 个答案:

答案 0 :(得分:9)

问题如下。

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()永远不会调用,我建议你扩展< strong> StringRequest 而不是JsonObjectRequest。

您可以查看this答案了解详情。

答案 1 :(得分:5)

实际上500意味着内部服务器错误,这是由你正在调用的Rest-api引起的,而不是由于Volley引起的,所以请检查后端代码。

答案 2 :(得分:-1)

尝试将php文件权限更改为755

答案 3 :(得分:-2)

检查您的价值小写字母信件,您的服务器采用哪种格式从您的末端接受价值。