Как решить ошибку в org.json.JSONException?

Я создаю приложение, которое может получить слово, поместив идентификационный номер в editText. Я продолжаю получать эту ошибку. Как решить эту проблему? Org.json.JSONException: Нет значения для {"server_response": "Bird"}

Введите описание изображения здесь

Вот моя основная активность.java

package com.example.keam.lastnato; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; public class MainActivity extends Activity { String id; String word; InputStream is=null; String result=null; String line=null; String data =""; TextView disp; String url = "http://192.168.0.10/checkpls.php"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText e_id=(EditText) findViewById(R.id.editText1); Button select=(Button) findViewById(R.id.button1); disp = (TextView)findViewById(R.id.textView); select.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub id = e_id.getText().toString(); select(); } }); } public void select() { class readThis extends AsyncTask<String, Void, String> { protected String doInBackground(String... params){ ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("id",id)); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(params[0]); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); Log.e("pass 1", "connection success "); } catch(Exception e) { Log.e("Fail 1", e.toString()); Toast.makeText(getApplicationContext(), "Invalid IP Address", Toast.LENGTH_LONG).show(); } try { BufferedReader reader = new BufferedReader (new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line); } is.close(); result = sb.toString(); Log.e("pass 2", "connection success "); } catch(Exception e) { Log.e("Fail 2", e.toString()); } try { JSONObject json_data = new JSONObject(result); word = json_data.getString(result); Toast.makeText(getBaseContext(), "Name: " + word, Toast.LENGTH_SHORT).show(); } catch(JSONException e) { Log.e("Fail 3", e.toString()); Log.e("log_tag", "Failed data was: " + result); } return word; } } readThis hello = new readThis(); hello.execute(new String[] {url}); } } 

Вот мой activity_main.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.keam.lastnato.MainActivity"> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="39dp" android:padding="11dp" android:hint="Id" android:ems="10" android:inputType="number"> <requestFocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText1" android:layout_centerHorizontal="true" android:layout_marginTop="24dp" android:onClick="parseJSON" android:padding="11dp" android:text="Select" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:id="@+id/textView" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> </RelativeLayout> 

Вот мой PHP-файл «checkpls.php»

  <?php $con = mysqli_connect("localhost", "root", "1234", "check") or die ("Error ".mysqli_error($con)); $id = $_POST['id']; $sql = "SELECT * FROM tblcheckword where id like '$id';"; $result = mysqli_query($con, $sql) or die("Error in selecting ".mysqli_error($con)); $response = array(); if(mysqli_num_rows($result) > 0){ while($row = mysqli_fetch_array($result)) { array_push($response, array("id"=>$row[0],"word"=>$row[1],"meaning"=>$row[2])); $retrieve = $row[1]; } echo json_encode(array("server_response" => $retrieve)); }else{ echo "Retrieve failed"; } mysqli_close($con); ?> 

Вот мой tblcheckword в WAMP phpmyadmin

Название базы данных = "проверить"

Введите описание изображения здесь

Вот моя ошибка logcat.

 08-19 14:10:48.367 23305-23536/com.example.keam.lastnato E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: com.example.keam.lastnato, PID: 23305 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:200) at android.os.Handler.<init>(Handler.java:114) at android.widget.Toast$TN.<init>(Toast.java:372) at android.widget.Toast.<init>(Toast.java:105) at android.widget.Toast.makeText(Toast.java:264) at com.example.keam.lastnato.MainActivity$1readThis.doInBackground(MainActivity.java:120) at com.example.keam.lastnato.MainActivity$1readThis.doInBackground(MainActivity.java:61) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) 08-19 14:10:49.969 23305-23536/com.example.keam.lastnato I/Process: Sending signal. PID: 23305 SIG: 9 

Изменить word = json_data.getString(result); word = json_data.getString("server_response");

Обновить:

 public void select(){ readThis hello = new readThis(); hello.execute(new String[] {url}); } private class ReadThis extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("id",id)); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(params[0]); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); Log.e("pass 1", "connection success "); } catch(Exception e) { Log.e("Fail 1", e.toString()); Toast.makeText(getApplicationContext(), "Invalid IP Address", Toast.LENGTH_LONG).show(); } try { BufferedReader reader = new BufferedReader (new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line); } is.close(); result = sb.toString(); Log.e("pass 2", "connection success "); } catch(Exception e) { Log.e("Fail 2", e.toString()); } } return result ; } @Override protected void onPostExecute(String result) { try { JSONObject json_data = new JSONObject(result); word = json_data.getString("server_response"); Toast.makeText(getBaseContext(), "Name: " + word, Toast.LENGTH_SHORT).show(); } catch(JSONException e) { Log.e("Fail 3", e.toString()); Log.e("log_tag", "Failed data was: " + result); } } @Override protected void onPreExecute() {} @Override protected void onProgressUpdate(Void... values) {} } 

JSON – пара значений ключа, например {"key","value"} ;

То, что вы пытаетесь сделать, это получить значение, используя сам объект JSON .

Измените строку word = json_data.getString(result); word = json_data.getString("YOUR_KEY");