2017-03-11 3 views
0

Ich bin neu, um eine Android-Anwendung zu entwickeln. Ich habe eine Menge damit in Verbindung stehender Post bezüglich der Frage gelesen, die ich fragte, aber die Tipps oder die Lösung von der Post lösten mein Problem nicht. wenn ich meine app laufen ich diesen Fehler bekommenFehler: JSON-Parser: Fehler beim Analysieren von Daten org.json.JSONException: Ende der Eingabe bei Zeichen 0

03-11 11:52:39.115 3209-3236/com.example.blue_sky.store E/JSON Parser: Error parsing data org.json.JSONException: End of input at character 0 of 
03-11 11:52:39.116 3209-3236/com.example.blue_sky.store E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 
                      Process: com.example.blue_sky.store, PID: 3209 
                      java.lang.RuntimeException: An error occured while executing doInBackground() 
                       at android.os.AsyncTask$3.done(AsyncTask.java:304) 
                       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:818) 
                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONArray org.json.JSONObject.getJSONArray(java.lang.String)' on a null object reference 
                       at com.example.blue_sky.store.MainActivity$Store.doInBackground(MainActivity.java:76) 
                       at com.example.blue_sky.store.MainActivity$Store.doInBackground(MainActivity.java:53) 
                       at android.os.AsyncTask$2.call(AsyncTask.java:292) 
                       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:818)  

hören ist mein MainAcivity:

package com.example.blue_sky.store; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

import org.apache.http.NameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class MainActivity extends ListActivity { 

    private ProgressDialog pd; 
    //jparser 
    JSONparser jsoNparser = new JSONparser(); 
    ArrayList<HashMap<String,String>> p; 
    //s 
    static JSONArray jsonArray ; 
    String Url="http://127.0.0.1/store.php"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     p = new ArrayList<HashMap<String, String>>(); 
     new Store().execute(); 
     /* Store s =new Store(); 
     s.execute();*/ 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
     String code = ((TextView)v.findViewById(R.id.tvPid)).getText().toString(); 
     Intent i = new Intent(MainActivity.this,ADD.class); 
     i.putExtra("pid",code); 
     startActivity(i); 
    } 

    class Store extends AsyncTask<String, String, String> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pd = new ProgressDialog(MainActivity.this); 
      pd.setMessage("LogIn"); 
      pd.show(); 
      //pd.dismiss(); 

     } 

     @Override 
     protected String doInBackground(String... params) { 
      List <NameValuePair> parms = new ArrayList<>(); // Building Parameters 
      //json 
      JSONObject jsonObject = jsoNparser.makeHttpRequest(Url,"GET",parms); 


      try { 
       // int t =jsonObject.getInt("t"); 
       int t =1; 
       if (t==1){ 
        jsonArray = jsonObject.getJSONArray("Store"); 
        for(int i = 0; i<jsonArray.length(); i++){ 
         //c 
         JSONObject jObject = jsonArray.getJSONObject(i); 
         String pid = jObject.getString("pid"); 
         String name = jObject.getString("name"); 
         String price = jObject.getString("price"); 
         String description = jObject.getString("description"); 

         HashMap<String,String> hashMap = new HashMap<String, String>(); 
         hashMap.put("pid",pid); 
         hashMap.put("name",name); 
         hashMap.put("price",price); 
         hashMap.put("description",description); 

         p.add(hashMap); 
        } 
       }else { 
        Toast.makeText(MainActivity.this,"اطلاعاتی یافت نشد!!",Toast.LENGTH_LONG).show(); 
       } 
      } catch (JSONException e) { 
       // e.printStackTrace(); 
       System.out.println("Error " + e.getMessage()); 
       return null; 
      } 

      return null; 
     } 

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

      pd.cancel(); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        ListAdapter listAdapter = new SimpleAdapter(MainActivity.this,p,R.layout.item_list, 
          new String[]{"pid","name","price","description","store"}, 
          new int[]{R.id.tvPid,R.id.tvName,R.id.tvPrice,R.id.tvDisc}); 
        setListAdapter(listAdapter); 
       } 
      }); 
     } 

    } 
    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if (pd != null) { 
      pd.dismiss(); 
      pd = null; 
     } 
    } 
} 

und dies ist meine ADD Klasse:

package com.example.blue_sky.store; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by Blue_Sky on 3/11/2017. 
*/ 

public class ADD extends Activity { 
    private String cod; 
    private ProgressDialog pd; 
    EditText InputName,InputCode,InputNumber; 
    Button Send; 
    JSONparser jparser = new JSONparser(); 
    private String url; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     InputName = (EditText)findViewById(R.id.edInputName); 
     InputCode = (EditText)findViewById(R.id.edInputCode); 
     InputNumber = (EditText)findViewById(R.id.edInputNumber); 
     Send = (Button)findViewById(R.id.btnSend); 

     setContentView(R.layout.add); 
     Bundle input = getIntent().getExtras(); 
     cod = input.getString("pid"); 
     Send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       new load().execute(); 
      } 
     }); 
    } 
    class load extends AsyncTask<String,String,String>{ 

     public void AttemptLogin(String name, String code, String number){ 
      name = InputName.getText().toString(); 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pd = new ProgressDialog(ADD.this); 
      pd.setMessage("LogIn"); 
      pd.show(); 

     } 

     String code = InputCode.getText().toString(); 
     String name = InputName.getText().toString(); 
     String number = InputNumber.getText().toString(); 

     @Override 
     protected String doInBackground(String... params) { 
      List<NameValuePair> parms = new ArrayList<NameValuePair>(); 
      parms.add(new BasicNameValuePair("name",name)); 
      parms.add(new BasicNameValuePair("code",code)); 
      parms.add(new BasicNameValuePair("number",number)); 
      parms.add((new BasicNameValuePair("cod",cod))); 

      JSONObject Json = jparser.makeHttpRequest(url,"POST",parms); 

      try { 
       int t = Json.getInt("t"); 
       if(t == 1){ 
        Intent in = new Intent(ADD.this,MainActivity.class); 
        startActivity(in); 
       }else { 
        Toast.makeText(getApplicationContext(),"خطایی رخ داده!!",Toast.LENGTH_LONG).show(); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      pd.dismiss(); 
     } 
    } 
} 

und die JSONParser Klasse:

package com.example.blue_sky.store; 

import android.util.Log; 

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 java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.util.List; 

public class JSONparser { 

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

    // constructor 
    public JSONparser() { 

    } 

    // function get json from url 
    // by making HTTP POST or GET mehtod 
    public 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)); 

       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 { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

    } 
} 
+3

Mögliche Duplikate von [Was ist eine NullPointerException, und wie behebe ich es?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

+0

Hallo, zeigen Sie Ihre JSON. –

Antwort

0

Ich denke, deine PHP-Datei gibt null zurück. Und Ihr JsonObject ist null.

Drucken Sie die Antwort:

 if (BuildConfig.DEBUG) { 

      Log.d("TAG", "Response : "+jsonObject); 
     } 

immer Debug-Prüfung nutzen, wenn Sie App im Play Store starten gehen. Es werden keine Protokolle gedruckt.

Verwandte Themen