java - org.json.JSONException : Value Data of type java. lang.String 无法转换为 JSONObject

标签 java android json

这是我的 Android 代码:

 public void SendDataToServer(final String name, final String email, final String password){
        class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... params) {

                String QuickName = name ;
                String QuickEmail = email ;
                String QuickPassword = password;


                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

                nameValuePairs.add(new BasicNameValuePair("nome", QuickName));
                nameValuePairs.add(new BasicNameValuePair("email", QuickEmail));
                nameValuePairs.add(new BasicNameValuePair("password", QuickPassword));


                try {
                    HttpClient httpClient = new DefaultHttpClient();

                    HttpPost httpPost = new HttpPost(Configs.signup);

                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                    HttpResponse response = httpClient.execute(httpPost);

                    HttpEntity entity = response.getEntity();


                } catch (ClientProtocolException e) {

                } catch (IOException e) {

                }
                return "Data Submit Successfully";
            }

            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);


                Log.d(result, "Value");


                try {

                    JSONObject jo = new JSONObject(result);
                    String status = jo.optString("status");


                        if (status.equals("0")) {
                            Toast.makeText(Signup.this, "Username already exists", Toast.LENGTH_LONG).show();

                        } else if (status.equals("1")) {
                            Intent intent = new Intent(Signup.this, Login.class);
                            startActivity(intent);

                            Toast.makeText(Signup.this, "Registered successfully", Toast.LENGTH_LONG).show();
                            Toast.makeText(Signup.this, "Verify your email adress in email received", Toast.LENGTH_SHORT).show();
                            finish();
                        } else if (status.equals("2")) {
                            Toast.makeText(Signup.this, "Failed to Signup", Toast.LENGTH_LONG).show();
                        }
                        //}

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

            }
        }
        SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
        sendPostReqAsyncTask.execute(name, email, password);
    }

这是错误:

07-21 12:55:35.297 24973-24973/com.futegolo.igomessenger W/System.err: org.json.JSONException: Value Data of type java.lang.String cannot be converted to JSONObject

这是我的 json 响应

{"status":0}

最佳答案

这是因为您没有在 doInBackground() 方法中返回来自服务的实际响应。你回来了

 return "Data Submit Successfully"

当您在 onPostExecute() 方法中转换该字符串时,显然这不是有效的 JsonObject

在此“HttpEntity entity = response.getEntity();”之后替换您的代码

HttpEntity entity = response.getEntity();
String result = null;
    if (entity != null) {

        // A Simple JSON Response Read
        InputStream instream = entity.getContent();
        result= convertStreamToString(instream);
        // now you have the string representation of the HTML request
        instream.close();
    }

    private static String convertStreamToString(InputStream is) {
/*
 * To convert the InputStream to String we use the BufferedReader.readLine()
 * method. We iterate until the BufferedReader return null which means
 * there's no more data to read. Each line will appended to a StringBuilder
 * and returned as String.
 */
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();

String line = null;
try {
    while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        is.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
return sb.toString();

而是返回您的硬编码字符串返回结果。希望有所帮助。 如需进一步引用,您可以点击以下链接

https://stackoverflow.com/questions/4457492/how-do-i-use-the-simple-http-client-in-android

关于java - org.json.JSONException : Value Data of type java. lang.String 无法转换为 JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45237105/

相关文章:

java - JPA:从外部源更新数据的好方法是什么?

java - 如果使用 @Autowired + @Qualifier 注入(inject),如何避免在重构过程中更改 bean 名称

java - AsyncTask 的 get() 方法 : Is there any scenario where it is actually the best option?

android - 使用 gluon 移动插件在开发 JavaFX 移动应用程序时进行调试

android - 任何多平台网络应用程序移动 URL 桌面快捷方式?

java - 如何在 Java 中主动更新 JList

javascript - 仅 Android 4.0 设备上的 Phonegap getCurrentPosition 超时

json - 安装 Perl 模块时 "Fatal error: ' EXTERN.h ' file not found"

java - Java Lambda 函数接受 JSON 输入时出现问题

ios - 使用 for 循环设置数组中的值