【问题标题】:org.json.JSONException: No value fororg.json.JSONException:没有值
【发布时间】:2016-01-18 03:25:56
【问题描述】:

*编辑:

所以我问过 PHP 专家,是的,他忘记在他的代码中写 "fullname" 字符串。对不起我的错误。

我是 Java Android 的新手,所以对这段代码有点困惑。我想要做的是获得价值,但它总是在 Android Studio 中出现这个错误:

W/System.err: org.json.JSONException: No value for fullname
W/System.err:     at org.json.JSONObject.get(JSONObject.java:355)
W/System.err:     at org.json.JSONObject.getString(JSONObject.java:515)
W/System.err:     at com.skafen.bayarin.ServerRequests$fetchUserDataAsyncTask.doInBackground(ServerRequests.java:130)
W/System.err:     at com.skafen.bayarin.ServerRequests$fetchUserDataAsyncTask.doInBackground(ServerRequests.java:93)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:288)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err:     at java.lang.Thread.run(Thread.java:841)

而java是:

public class fetchUserDataAsyncTask extends AsyncTask<Void, Void, User> { //line #93

        User user;
        GetUserCallback userCallback;

        public fetchUserDataAsyncTask(User user, GetUserCallback userCallback) {
            this.user = user;
            this.userCallback = userCallback;

        }

        @Override
        protected User doInBackground(Void... params) {
            ArrayList<NameValuePair> dataToSend = new ArrayList<>();
            dataToSend.add(new BasicNameValuePair("username", user.username));
            dataToSend.add(new BasicNameValuePair("password", user.password));

            HttpParams httpRequestParams = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
            HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);

            HttpClient client = new DefaultHttpClient(httpRequestParams);
            HttpPost post = new HttpPost(SERVER_ADDRESS + "FetchUserData.php");


            User returnedUser = null;
            try {
                post.setEntity(new UrlEncodedFormEntity(dataToSend));
                HttpResponse httpResponse =  client.execute(post);

                HttpEntity entity = httpResponse.getEntity();
                String result = EntityUtils.toString(entity);
                JSONObject jObject = new JSONObject(result);

                if (jObject.length() == 0 ){
                    returnedUser = null;
                }else {
                    String fullname = jObject.getString("fullname"); //line #130
                    int birthday = jObject.getInt("birthday");
                    String email = jObject.getString("email");

                    returnedUser = new User(fullname, birthday, email, user.username, user.password);
                }

            }catch (Exception e){
                e.printStackTrace();
            }

            return returnedUser;
        }

        @Override
        protected void onPostExecute(User returnedUser) {
            progressDialog.dismiss();
            userCallback.done(returnedUser);
            super.onPostExecute(returnedUser);
        }
    }

感谢您的关注,如果我发布具有相同主题的新帖子,我深表歉意,因为我是新来的。

谢谢。

【问题讨论】:

  • 那么,JSON 是否包含全名?打印result查看
  • 是的,我们需要json字符串,请发布
  • 我不明白你的意思,抱歉我的英语不好。
  • 打印变量jObject并将其添加到您的问题中

标签: java android json


【解决方案1】:

使用

jsonObject.optString("SELECTOR"); 

插入

jsonObject.getString("SELECTOR");

【讨论】:

    【解决方案2】:

    因为您正在尝试获取 HttpResponse 中甚至不存在的名为“fullname”的值。确保响应的 json 包含一个名为“fullname”(告诉服务器人员)的键,然后重试。

    【讨论】:

    • 好的,我会问 PHP 专家。谢谢。
    • 确保在调试模式下首先看到 json。如果那是“full_name”或“FULL_NAME”而不是“fullname”,这将是你的错。
    • 感谢提醒,是的,PHP 家伙忘了写代码。非常感谢朋友!
    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多