Вставить строки в базу данных через json не работает

Я следил за этим учебным пособием http://www.androidhive.info/2012/05/how-to-connect-android-with-phpmysql/, но это не работает, хотя я думаю, что я следил за ним шаг за шагом , Что не работает, так это написать в моей базе данных несколько строк. Не могли бы вы дать несколько советов? Спасибо вам большое за ваше время. Вот logcat:

02-22 05:10:45.262: E/AndroidRuntime(1202): FATAL EXCEPTION: AsyncTask #2 02-22 05:10:45.262: E/AndroidRuntime(1202): Process: com.example.test, PID: 1202 02-22 05:10:45.262: E/AndroidRuntime(1202): java.lang.RuntimeException: An error occured while executing doInBackground() 02-22 05:10:45.262: E/AndroidRuntime(1202): at android.os.AsyncTask$3.done(AsyncTask.java:300) 02-22 05:10:45.262: E/AndroidRuntime(1202): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 02-22 05:10:45.262: E/AndroidRuntime(1202): at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 02-22 05:10:45.262: E/AndroidRuntime(1202): at java.util.concurrent.FutureTask.run(FutureTask.java:242) 02-22 05:10:45.262: E/AndroidRuntime(1202): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 02-22 05:10:45.262: E/AndroidRuntime(1202): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 02-22 05:10:45.262: E/AndroidRuntime(1202): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 02-22 05:10:45.262: E/AndroidRuntime(1202): at java.lang.Thread.run(Thread.java:841) 02-22 05:10:45.262: E/AndroidRuntime(1202): Caused by: java.lang.NullPointerException 02-22 05:10:45.262: E/AndroidRuntime(1202): at com.example.test.MainActivity$CreateNewRow.doInBackground(MainActivity.java:134) 02-22 05:10:45.262: E/AndroidRuntime(1202): at com.example.test.MainActivity$CreateNewRow.doInBackground(MainActivity.java:1) 02-22 05:10:45.262: E/AndroidRuntime(1202): at android.os.AsyncTask$2.call(AsyncTask.java:288) 02-22 05:10:45.262: E/AndroidRuntime(1202): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 02-22 05:10:45.262: E/AndroidRuntime(1202): ... 4 more 

Это мой php:

  /* * Following code will create a new product row * All product details are read from HTTP Post Request */ // array for JSON response $response = array(); // check for required fields if (isset($_POST['nume']) && isset($_POST['masa']) && isset($_POST['ip'])) { $nume = $_POST['nume']; $masa = $_POST['masa']; $ip = $_POST['ip']; // include db connect class require_once __DIR__ . '/db_connect.php'; // connecting to db $db = new DB_CONNECT(); // mysql inserting a new row $result = mysql_query("INSERT INTO test2(null,nume, masa, ip) VALUES(null,'$nume', '$masa', '$ip')"); // check if row inserted or not if ($result) { // successfully inserted into database $response["success"] = 1; $response["message"] = "Product successfully created."; // echoing JSON response echo json_encode($response); } else { // failed to insert row $response["success"] = 0; $response["message"] = "Oops! An error occurred."; // echoing JSON response echo json_encode($response); } } else { // required field is missing $response["success"] = 0; $response["message"] = "Required field(s) is missing"; // echoing JSON response echo json_encode($response); } ?> 

Это мой парсер:

 package com.example.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public class JSONParser { static InputStream is = null; static JSONObject jArr=null; static String json = ""; // function get json from url // by making HTTP POST or GET method public static JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) { // Making HTTP request try { // check for request method if(method == "POST"){ // request method is POST // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(params,"utf-8")); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); }else if(method == "GET"){ // request method is GET DefaultHttpClient httpClient = new DefaultHttpClient(); String paramString = URLEncodedUtils.format(params, "utf-8"); url += "?" + paramString; HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jArr = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String (Array) return jArr; } } 

И это моя основная деятельность:

 package com.example.test; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.text.format.Formatter; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; //import java.util.logging.Formatter; public class MainActivity extends Activity { // Progress Dialog private ProgressDialog pDialog; JSONParser jsonParser = new JSONParser(); EditText inputName; EditText inputDesc; // url to create new product private static String url_create_row = "http://localhost/android_connect/create_row.php"; // JSON Node names private static final String TAG_SUCCESS = "success"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Edit Text inputName = (EditText) findViewById(R.id.inputName); inputDesc = (EditText) findViewById(R.id.inputDesc); inputDesc.setText(getLocalIpAddress().toString()); // Create button Button btnCreateProduct = (Button) findViewById(R.id.btnAdaugare); // button click event btnCreateProduct.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // creating new product in background thread new CreateNewRow().execute(); } }); } public String getLocalIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { String ip = Formatter.formatIpAddress(inetAddress.hashCode()); Log.i(TAG_SUCCESS, "****IP="+ip); return ip; } } } } catch (SocketException ex) { System.out.println("lala"+ex.toString()); } return null; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } /** * Background Async Task to Create new product * */ class CreateNewRow extends AsyncTask<String, String, String> { /** * Before starting background thread Show Progress Dialog * */ /* @Override protected void onPreExecute() { super.onPreExecute(); pDialog.setMessage("Creating Row.."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); Log.d(TAG_SUCCESS, "SUCCESSSSSSSSS!"); }*/ /** * Creating product * */ protected String doInBackground(String... args) { String nume = inputName.getText().toString(); String ip = inputDesc.getText().toString(); String masa = "1"; // Building Parameters List <NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("nume", nume)); params.add(new BasicNameValuePair("masa", masa)); params.add(new BasicNameValuePair("IP", ip)); // getting JSON Object // Note that create product url accepts POST method JSONObject json = JSONParser.makeHttpRequest(url_create_row, "POST", params); // check log cat for response Log.d("Create Response", json.toString()); // check for success tag try { int success = json.getInt(TAG_SUCCESS); if (success == 1) { // successfully created product Toast.makeText(MainActivity.this, "sa adaugat ceva in baza de date!", Toast.LENGTH_LONG).show(); // closing this screen finish(); } else { // failed to create product Log.d(TAG_SUCCESS, "Nu a mers nimic"); } } catch (JSONException e) { e.printStackTrace(); } return null; } /** * After completing background task Dismiss the progress dialog * **/ /*protected void onPostExecute(String file_url) { // dismiss the dialog once done pDialog.dismiss(); }*/ } } 

Я добавил разрешение интернета в манифест и доступ к сети. Любое предложение будет полезно и оценено.

Будьте осторожны, параметры HTTP чувствительны к регистру.

Вы отправляете

 params.add(new BasicNameValuePair("IP", ip)); 

но вы проверяете

 isset($_POST['ip']) 

он должен быть таким же:

 params.add(new BasicNameValuePair("ip", ip)); 

также вы неправильно используете асинхронную задачу:

 protected JSONObject doInBackground(String... args) { String nume = inputName.getText().toString(); String ip = inputDesc.getText().toString(); String masa = "1"; // Building Parameters List <NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("nume", nume)); params.add(new BasicNameValuePair("masa", masa)); params.add(new BasicNameValuePair("IP", ip)); // getting JSON Object // Note that create product url accepts POST method JSONObject json = JSONParser.makeHttpRequest(url_create_row, "POST", params); // check log cat for response Log.d("Create Response", json.toString()); return json; } protected void onPostExecute(JSONObject json) { if(json != null){ try { int success = json.getInt(TAG_SUCCESS); if (success == 1) { // successfully created product Toast.makeText(MainActivity.this, "sa adaugat ceva in baza de date!", Toast.LENGTH_LONG).show(); // closing this screen finish(); } else { // failed to create product Log.d(TAG_SUCCESS, "Nu a mers nimic"); } } catch (JSONException e) { e.printStackTrace(); } } } 

Вам не разрешено обновлять пользовательский интерфейс (например, toast) в doInBackground Вы должны перенести этот код на onPostExecute.