2016-06-27 6 views
0

Iam, создающий приложение с подключением к серверу и считывание json, но получаю java.lang.String org.json.JSONObject.toString() 'на ссылке null object reference.please help me .THANKS заранее Вот моя деятельностьОшибка JSON PARSING во время работы приложения

public class NewProductActivity extends Activity { 

private ProgressDialog pDialog; 

JSONParser jsonParser = new JSONParser(); 
EditText inputName; 
Button createBtn; 

private static String url_create_product = "http://10.0.2.2/create_product.php"; 

private static final String TAG_SUCCESS = "success"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_product); 

    inputName = (EditText)findViewById(R.id.nameEt); 
    createBtn = (Button)findViewById(R.id.createBt); 

    createBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      new CreateNewProduct().execute(); 
     } 
    }); 

} 
class CreateNewProduct extends AsyncTask<String,String,String>{ 
    String name = inputName.getText().toString(); 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(NewProductActivity.this); 
     pDialog.setMessage("Creating Product.."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 
    protected String doInBackground(String... args){ 

     inputName = (EditText)findViewById(R.id.nameEt); 

     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("name",name)); 

     JSONObject json = jsonParser.makeHttprequest(url_create_product, 
       "POST", params); 

     // check log cat fro response 
     Log.d("Create Response", json.toString()); 

     // check for success tag 
     try { 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // successfully created product 
       Intent i = new Intent(getApplicationContext(), AllProductsActivty.class); 
       startActivity(i); 

       // closing this screen 
       finish(); 
      } else { 
       // failed to create product 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog once done 
     pDialog.dismiss(); 
    } 
} 
} 

вот мой Json анализатор общественного класса JSONParser {

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 

public JSONParser(){} 

public JSONObject makeHttprequest(String url, String method, List<NameValuePair> params){ 

    try { 
     if (method.equals("POST")){ 

      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new UrlEncodedFormEntity(params)); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 
     }else if (method .equals("GET")){ 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      String paramString = URLEncodedUtils.format(params,"url"); 
      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"); 
    } 
    try { 
     jObj = new JSONObject(json); 
    }catch (JSONException e){ 
     Log.e("JSON Parser","Error parsing"); 
    } 

    return jObj; 
} 
} 

вот мой PHP файл

 <?php 
$response = array(); 
    if(isset($_POST['name'])){ 
    $name = $_POST['name']; 

$con = mysql_connect("localhost","root","root"); 
$db = mysql_select_db("db"); 
$result = mysql_query("INSERT INTO product(name) VALUES ('$name')"); 

if($result){ 
    $response["success"] = 1; 
    $response["message"] = "successfully inserted"; 
    echo json_encode($respone); 
} 
else { 
    $response["success"] = 0; 
    $response["message"] ="error occured"; 
    echo json_encode($response); 
} 
} else{ 
$response["success"] = 0; 
    $response["message"] = "required feild missing"; 
    echo json_encode($response); 
} 

?> 

вот мой журнал ошибок

  06-27 18:35:55.097 3462-4317/com.example.joel339.sample   E/JSON Parser: Error parsing 

                    --------- beginning of crash 
      06-27 18:35:55.097 3462-4317/com.example.joel339.sample E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 


                     Process: com.example.joel339.sample, PID: 3462 
                     java.lang.RuntimeException: An error occurred while executing doInBackground() 
                      at android.os.AsyncTask$3.done(AsyncTask.java:309) 
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                      at java.lang.Thread.run(Thread.java:818) 
      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference 
                      at com.example.joel339.sample.NewProductActivity$CreateNewProduct$override.doInBackground(NewProductActivity.java:70) 
                      at com.example.joel339.sample.NewProductActivity$CreateNewProduct$override.access$dispatch(NewProductActivity.java) 
                      at com.example.joel339.sample.NewProductActivity$CreateNewProduct.doInBackground(NewProductActivity.java:0) 
                      at com.example.joel339.sample.NewProductActivity$CreateNewProduct.doInBackground(NewProductActivity.java:50) 
                      at android.os.AsyncTask$2.call(AsyncTask.java:295) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
                      at java.lang.Thread.run(Thread.java:818)  

я могу создать новый продукт, мой список продуктов JSON обновляется, но я не могу видеть список продуктов

вот список продуктов деятельности

public class AllProductsActivty extends ListActivity { 

private ProgressDialog pDialog; 
JSONParser jParser = new JSONParser(); 
ArrayList<HashMap<String,String>> productsList; 

private static String url_all_products = "http://10.0.2.2/get_all_products_details.php"; 
private static final String TAG_SUCCESS = "success"; 
private static final String TAG_PRODUCTS = "product"; 
private static final String TAG_PID = "pid"; 
private static final String TAG_NAME = "name"; 

JSONArray products = null; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.all_products); 

    productsList = new ArrayList<HashMap<String, String>>(); 

    ListView lv = getListView(); 

    new LoadAllProducts().execute(url_all_products); 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      String pid = ((TextView)view.findViewById(R.id.pid)).getText().toString(); 

      Intent in = new Intent(getApplicationContext(),EditProductActivity.class); 
      in.putExtra(TAG_PID,pid); 

      startActivityForResult(in,100); 
     } 
    }); 
} 
@Override 
protected void onActivityResult(int requestCode,int resultCode , Intent data){ 
    super.onActivityResult(requestCode,resultCode,data); 

    if(resultCode == 100){ 
     Intent intent = getIntent(); 
     finish(); 
     startActivity(intent); 
    } 
} 

class LoadAllProducts extends AsyncTask< String,String,String>{ 
    @Override 
    protected void onPreExecute(){ 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(AllProductsActivty.this); 
     pDialog.setMessage("LoadingProducts.Please Wait"); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 
    protected String doInBackground(String... args){ 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 

     JSONObject json = jParser.makeHttprequest(url_all_products,"GET",params); 
     Log.d("Allproducts:",json.toString()); 

     try{ 
      int success = json.getInt(TAG_SUCCESS); 
      if (success == 1){ 

       products = json.getJSONArray(TAG_PRODUCTS); 

       for (int i = 0;i < products.length();i++){ 
        JSONObject c =products.getJSONObject(i); 

        String id = c.getString(TAG_PID); 
        String name = c.getString(TAG_NAME); 

        HashMap<String,String> map = new HashMap<String, String>(); 

        map.put(TAG_PID,id); 
        map.put(TAG_NAME,name); 
        productsList.add(map); 
       } 
      }else{ 
       Intent i = new Intent(getApplicationContext(),NewProductActivity.class); 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 
      } 
     } 
     catch (JSONException e){ 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    protected void onPostExecute(String file_url){ 
     pDialog.dismiss(); 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       ListAdapter adapter = new SimpleAdapter(
         AllProductsActivty.this,productsList,R.layout.list_view,new String[]{TAG_PID,TAG_NAME}, 
         new int[]{R.id.pid,R.id.name}); 
       setListAdapter(adapter); 
      } 
     }); 
    } 

} 

}

+1

Вы не должны инициализировать представление в фоновом потоке remove 'inputName = (EditText) findViewById (R.id.nameEt);' in doInBackground и ваш jsonObject имеет значение null, поэтому вы получаете здесь нулевое выражение указателя // // check log cat fro response Log.d ("Создать ответ", json.toString()); ' – SaravInfern

+0

Что такое строка '295' в вашем коде? –

+0

то где я должен инициализировать представление? –

ответ

1

ошибка в этой строке.

Log.d("Create Response", json.toString()); 

Из-за null объекта, это дает вам исключения нулевого указателя. Двойная проверка с этой линии, просто добавьте проверку безопасности, как показано ниже

if (json == null || json == JSONObject.NULL){ 
    // error handling.. 
} 
else 
{ 
    // Your code 
} 

Предложение: (не относится к сбою)

Просто удалите эту строку inputName = (EditText)findViewById(R.id.nameEt); в doInBackground(). Вы уже инициализировали эту переменную в onCreate(), поэтому просто удалите ее.

+0

все еще не смог получить ошибку –

+0

@sunnyjoel показать мне ваш обновленный код .. В противном случае удалите эту строку 'Log.d (« Создать ответ », json.toString());' и проверьте это. – Mani

+0

Да, это сработало. Приложение не сработает сейчас. Но это не значит, что цель AllProductsActivity. –