簡體   English   中英

org.json.JSONException:值類型為java.lang.String的數據不能轉換為JSONObject

[英]org.json.JSONException: Value Data of type java.lang.String cannot be converted to JSONObject

這是我的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:值java.lang.String類型的數據無法轉換為JSONObject

這是我的json回應

{"status":0}

這是因為您沒有在doInBackground()方法中從服務返回實際的響應。 您將返回

 return "Data Submit Successfully"

當您在onPostExecute()方法中轉換該字符串時,顯然這是無效的JsonObject

在此“ HttpEntity實體= 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

使用以下代碼:

   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();
    StringBuffer result= new StringBuffer();
     BufferedReader in = new BufferedReader(
                        new InputStreamReader(entity.getContent()));
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    result.append(inputLine);
                }
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result.toString();
                }

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

Appache已經提供了一個稱為EntityUtils的Util類。

用此代碼替換return "Data Submit Successfully"

String responseText = EntityUtils.toString(httpResponse.getEntity());
EntityUtils.consume(httpResponse.getEntity());

return responseText;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM