我的应用程序中出现JSONObject错误

时间:2017-11-05 07:24:55

标签: java android json

尝试使用为我创建的出租车预订应用,在尝试注册用户时抛出错误。错误是:

W/System.err: org.json.JSONException: Value 501 at error of type java.lang.String cannot be converted to JSONObject
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at org.json.JSON.typeMismatch(JSON.java:100)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at org.json.JSONObject.getJSONObject(JSONObject.java:613)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at in.techware.lataxi.net.parsers.RegistrationParser.parseRegistrationResponse(RegistrationParser.java:25)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at in.techware.lataxi.net.invokers.RegistrationInvoker.invokeRegistrationWS(RegistrationInvoker.java:42)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at in.techware.lataxi.net.WSAsyncTasks.RegistrationTask.doInBackground(RegistrationTask.java:27)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at in.techware.lataxi.net.WSAsyncTasks.RegistrationTask.doInBackground(RegistrationTask.java:12)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
11-05 01:59:32.079 in.techware.lataxi W/System.err:     at java.lang.Thread.run(Thread.java:818)

以下是解析器文件:

RegistrationParser.java片段

import org.json.JSONException;
import org.json.JSONObject;

import in.techware.lataxi.app.App;
import in.techware.lataxi.model.AuthBean;


public class RegistrationParser {

    public AuthBean parseRegistrationResponse(String wsResponseString) {

        AuthBean authBean = new AuthBean();

        JSONObject jsonObj = null;

        try {
            jsonObj = new JSONObject(wsResponseString);


            if (jsonObj.has("error")) {
                JSONObject errorJSObj;
                try {
                    errorJSObj = jsonObj.getJSONObject("error");
                    if (errorJSObj != null) {
                        if (errorJSObj.has("message")) {
                            authBean.setErrorMsg(errorJSObj.optString("message"));
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                authBean.setStatus("error");
            }
            if (jsonObj.has("status")) {
                authBean.setStatus(jsonObj.optString("status"));
                if (jsonObj.optString("status").equals("error")) {
                    if (jsonObj.has("message")) {
                        authBean.setErrorMsg(jsonObj.optString("message"));
                    } else {
                        authBean.setErrorMsg("Something Went Wrong. Please Try Again Later!!!");
                    }
                }
                if (jsonObj.optString("status").equals("500")) {
                    if (jsonObj.has("error")) {
                        authBean.setErrorMsg(jsonObj.optString("error"));
                    }
                }
                if (jsonObj.optString("status").equals("404")) {
                    if (jsonObj.has("error")) {
                        authBean.setErrorMsg(jsonObj.optString("error"));
                    }
                }
                if (jsonObj.has("message")) {
                    authBean.setErrorMsg(jsonObj.optString("message"));
                }
                if (jsonObj.optString("status").equals("notfound"))
                    authBean.setErrorMsg("Email Not Found");
                if (jsonObj.optString("status").equals("invalid"))
                    authBean.setErrorMsg("Password Is Incorrect");
            }
            try {
                if (jsonObj.has("message")) {
                    authBean.setWebMessage(jsonObj.optString("message"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            if (jsonObj.has("data")) {
                JSONObject dataObj = jsonObj.optJSONObject("data");
                if (dataObj != null) {
                    try {

                        if (dataObj.has("token")) {
                            authBean.setAuthToken(dataObj.optString("token"));
                        }
                        if (dataObj.has("auth_token")) {
                            authBean.setAuthToken(dataObj.optString("auth_token"));
                        }
                        if (dataObj.has("user")) {
                            JSONObject userObj = dataObj.optJSONObject("user");

                            if (userObj != null) {
                                if (userObj.has("auth_token")) {
                                    authBean.setAuthToken(userObj.optString("auth_token"));
                                }
                                if (userObj.has("username")) {
                                    authBean.setUserName(userObj.optString("username"));
                                }
                                if (userObj.has("user_id")) {
                                    authBean.setUserID(userObj.optString("user_id"));
                                }
                                if (userObj.has("id")) {
                                    authBean.setUserID(userObj.optString("id"));
                                }
                                if (userObj.has("profile_photo")) {
                                    authBean.setProfilePhoto(App.getImagePath(userObj.optString("profile_photo")));
                                }
                                if (userObj.has("name")) {
                                    authBean.setName(userObj.optString("name"));
                                }
                                if (userObj.has("phone")) {
                                    authBean.setPhone(userObj.optString("phone"));
                                }
                                if (userObj.has("email")) {
                                    authBean.setEmail(userObj.optString("email"));
                                }
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            }

        } catch (JSONException e) {
            e.printStackTrace();
            return null;
        }
        return authBean;
    }
}

RegistrationInvoker.java

package in.techware.lataxi.net.invokers;

import org.json.JSONObject;

import java.util.HashMap;

import in.techware.lataxi.model.AuthBean;
import in.techware.lataxi.net.ServiceNames;
import in.techware.lataxi.net.WebConnector;
import in.techware.lataxi.net.parsers.RegistrationParser;
import in.techware.lataxi.net.utils.WSConstants;

public class RegistrationInvoker extends BaseInvoker {

    public RegistrationInvoker() {
        super();
    }

    public RegistrationInvoker(HashMap<String, String> urlParams,
                               JSONObject postData) {
        super(urlParams, postData);
    }

    public AuthBean invokeRegistrationWS() {

        System.out.println("POSTDATA>>>>>>>" + postData);

        WebConnector webConnector;

        webConnector = new WebConnector(new StringBuilder(ServiceNames.USER_REGISTRATION), WSConstants.PROTOCOL_HTTP, null, postData);

        String wsResponseString = webConnector.connectToPOST_service();

        System.out.println(">>>>>>>>>>> response: " + wsResponseString);
        AuthBean authBean = null;
        if (wsResponseString.equals("")) {

            return authBean = null;
        } else {
            authBean = new AuthBean();
            RegistrationParser registrationParser = new RegistrationParser();
            authBean = registrationParser.parseRegistrationResponse(wsResponseString);
            return authBean;
        }
    }
}

RegistrationTask.java

    package in.techware.lataxi.net.WSAsyncTasks;

import android.os.AsyncTask;

import org.json.JSONObject;

import java.util.HashMap;

import in.techware.lataxi.model.AuthBean;
import in.techware.lataxi.net.invokers.RegistrationInvoker;

public class RegistrationTask extends AsyncTask<String, Integer, AuthBean> {

    private RegistrationTaskListener registrationTaskListener;

    private JSONObject postData;

    public RegistrationTask(JSONObject postData) {
        super();
        this.postData = postData;
    }

    @Override
    protected AuthBean doInBackground(String... params) {
        System.out.println(">>>>>>>>>doInBackground");
        RegistrationInvoker registrationInvoker = new RegistrationInvoker(null, postData);
        return registrationInvoker.invokeRegistrationWS();
    }

    @Override
    protected void onPostExecute(AuthBean result) {
        super.onPostExecute(result);
        if (result != null)
            registrationTaskListener.dataDownloadedSuccessfully(result);
        else
            registrationTaskListener.dataDownloadFailed();
    }

    public static interface RegistrationTaskListener {

        void dataDownloadedSuccessfully(AuthBean authBean);

        void dataDownloadFailed();
    }

    public RegistrationTaskListener getRegistrationTaskListener() {
        return registrationTaskListener;
    }

    public void setRegistrationTaskListener(RegistrationTaskListener registrationTaskListener) {
        this.registrationTaskListener = registrationTaskListener;
    }
}

请帮忙吗?不完全确定如何使用JSONObjects,在学习过程中,但对我来说还是新手

2 个答案:

答案 0 :(得分:0)

在RegistrationParser.java文件的特定部分下面,期望“error”键的值再次成为json对象。但是,响应包含此“错误”键的字符串值“501”。因此它抛出了一个jsonexception。

if (jsonObj.has("error")) {
                JSONObject errorJSObj;
                try {
                    errorJSObj = jsonObj.getJSONObject("error");
                    if (errorJSObj != null) {
                        if (errorJSObj.has("message")) {
                            authBean.setErrorMsg(errorJSObj.optString("message"));
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                authBean.setStatus("error");
            }
}

基本上,错误代码501意味着您尚未实现创建用户的部分,因此您的Web服务会抛出此错误而不是200代码。此外,在出现任何网络错误时解析响应的方式与服务器发送的实际错误响应不同。

答案 1 :(得分:0)

pip install sqlalchemy==1.1.15

可能你从响应而不是json对象获取字符串。尝试在jsonObj值中找到实际的Json对象。记录JsonObj。