2016-07-29 19 views
0

Ich möchte Hilfe beim Erstellen einer PHP-Datei für die Datenbank, um sie an meinen Server anzuhängen und zu verwenden es für json parsing.also weiß ich nicht, wie man ein spezifisches json in Bezug auf eine php Akte verursacht. Ich möchte nur eine App erstellen, um Textdaten vom Server abzurufen. ** Jede Informationen darüber, wie ein PHP-n seine json schaffen wird sehr hilfreich sein. **NullPointerException: Versuch, die virtuelle Methode 'org.json.JSONObject org.json.JSONArray.getJSONObject (int)' für eine Nullobjekt-Referenz aufzurufen

Das ist mein MainActivity.java Klasse

public class MainActivity extends ActionBarActivity implements View.OnClickListener { 

private TextView textViewJSON; 
private Button buttonGet; 
private Button buttonParse; 

public static final String MY_JSON ="MY_JSON"; 

private static final String JSON_URL = "\n" + 
     "http://file-manager.000webhost.com/file-manager/index.php"; 

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

    textViewJSON = (TextView) findViewById(R.id.textViewJSON); 
    textViewJSON.setMovementMethod(new ScrollingMovementMethod()); 
    buttonGet = (Button) findViewById(R.id.buttonGet); 
    buttonParse = (Button) findViewById(R.id.buttonParse); 
    buttonGet.setOnClickListener(this); 
    buttonParse.setOnClickListener(this); 
} 


@Override 
public void onClick(View v) { 
    if(v==buttonGet){ 
     getJSON(JSON_URL); 
    } 

    if(v==buttonParse){ 
     showParseActivity(); 
    } 
} 

private void showParseActivity() { 
    Intent intent = new Intent(this, ParseJSON.class); 
    intent.putExtra(MY_JSON,textViewJSON.getText().toString()); 
    startActivity(intent); 
} 


private void getJSON(String url) { 
    class GetJSON extends AsyncTask<String, Void, String>{ 
     ProgressDialog loading; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      loading = ProgressDialog.show(MainActivity.this, "Please Wait...",null,true,true); 
     } 

     @Override 
     protected String doInBackground(String... params) { 

      String uri = params[0]; 

      BufferedReader bufferedReader = null; 
      try { 
       URL url = new URL(uri); 
       HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
       StringBuilder sb = new StringBuilder(); 

       bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

       String json; 
       while((json = bufferedReader.readLine())!= null){ 
        sb.append(json+"\n"); 
       } 

       return sb.toString().trim(); 

      }catch(Exception e){ 
       return null; 
      } 

     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      loading.dismiss(); 
      textViewJSON.setText(s); 
     } 
    } 
    GetJSON gj = new GetJSON(); 
    gj.execute(url); 
} 
} 

Das ist mein ParserJson.java Klasse

public class ParseJSON extends ActionBarActivity implements View.OnClickListener{ 

private String myJSONString; 

private static final String JSON_ARRAY ="result"; 
private static final String ID = "id"; 
private static final String USERNAME= "name"; 

private JSONArray users = null; 

private int TRACK = 0; 

private EditText editTextId; 
private EditText editTextUserName; 
private EditText editTextPassword; 

Button btnPrev; 
Button btnNext; 

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

    Intent intent = getIntent(); 
    myJSONString = intent.getStringExtra(MainActivity.MY_JSON); 


    editTextId = (EditText) findViewById(R.id.editTextID); 
    editTextUserName = (EditText) findViewById(R.id.editTextUsername); 
    editTextPassword = (EditText) findViewById(R.id.editTextPassword); 

    btnPrev = (Button) findViewById(R.id.buttonPrev); 
    btnNext = (Button) findViewById(R.id.buttonNext); 

    btnPrev.setOnClickListener(this); 
    btnNext.setOnClickListener(this); 

    extractJSON(); 

    showData(); 
} 



private void extractJSON(){ 
    try { 
     JSONObject jsonObject = new JSONObject(myJSONString); 
     //users =new JSONArray(JSON_ARRAY); 
     users = jsonObject.getJSONArray(JSON_ARRAY); 
     // JSONObject jsonObject =users.getJSONObject(0); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

private void moveNext(){ 
    if(TRACK<users.length()){ 
     TRACK++; 
    } 
    showData(); 
} 

private void movePrev(){ 
    if(TRACK>0){ 
     TRACK--; 
    } 
    showData(); 
} 

private void showData(){ 
    try { 
     JSONObject jsonObject = users.getJSONObject(TRACK); 

     editTextId.setText(jsonObject.getString(ID)); 
     editTextUserName.setText(jsonObject.getString(USERNAME)); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

} 


@Override 
public void onClick(View v) { 
    if(v == btnNext){ 
     moveNext(); 
    } 
    if(v == btnPrev){ 
     movePrev(); 
    } 
} 
} 

Dies ist meine PHP-Datei im öffentlichen HTML-Ordner von Dateimanager.Ich weiß auch nicht, wo diese Datei zu speichern, die über meine Datenbank erzählt. Der Name meiner PHP-Datei ist mark42.php aber es spart als index.php.

<?php 
define('HOST','mysql9.000webhost.com'); 
define('USER','**********'); 
define('PASS','******'); 
define('DB','a4023522_db');$con = mysqli_connect(HOST,USER,PASS,DB); $sql = "select * from mark42"; 
$res = mysqli_query($con,$sql); 
$result = array(); 
while($row = mysqli_fetch_array($res)){ 
array_push($result,array('id'=>$row[0],'name'=>$row[1])); 
} 
echo json_encode(array("result"=>$result)); 
mysqli_close($con); 
?> 

Das ist mein logcat Fehler, Abstürze app, wenn ich drücken Sie die parsejson Taste.

FATAL EXCEPTION: main Process: test.nic.com.nicpro, PID: 6506 
java.lang.RuntimeException: Unable to start activity ComponentInfo{test.nic.com.nicpro/test.nic.com.nicpro.ParseJSON}: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONObject org.json.JSONArray.getJSONObject(int)' on a null object reference 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONObject org.json.JSONArray.getJSONObject(int)' on a null object reference 
at test.nic.com.nicpro.ParseJSON.showData(ParseJSON.java:94) 
at test.nic.com.nicpro.ParseJSON.onCreate(ParseJSON.java:62) 
at android.app.Activity.performCreate(Activity.java:6251) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
at android.app.ActivityThread.-wrap11(ActivityThread.java)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
at android.os.Handler.dispatchMessage(Handler.java:102)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5417)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
+2

TLDR - Konsolidierung Ihrer Frage bitte – cmorrissey

+0

Können Sie Ihre gepostete Fehlerprotokoll Katze sehen? Bitte teilen Sie auch Ihre JSON-Datei. –

+0

@MdSufiKhan Ich habe alle Java-Klassen gepostet, die ich benutzt habe.Sie finden darin einen Fehler. – 7rocker

Antwort

1
JSONObject jsonObject = users.getJSONObject(TRACK) 

ein NullPointerException werfen. Das bedeutet, dass Ihre Linie:

users = jsonObject.getJSONArray(JSON_ARRAY); 

users zu null setzt. Überprüfen Sie, dass das Array tatsächlich existiert in Ihrem Objekt, und dass Sie nicht versehentlich die falsche Taste verwendet haben

+0

danke ich werde in das sehen. – 7rocker

+0

Ich fand die Antwort auf das Problem, indem ich einfach ActionBarActivity in AppCompatActivity änderte. Die Nullzeigerausnahme verschwand automatisch! @http: //stackoverflow.com/users/116938/austyn-mahoney kannst du das erklären, warum das passiert ist! – 7rocker

0

Sie müssen lernen, wie man den Debugger verwenden.

Setzen Sie einen Haltepunkt auf:

JSONObject jsonObject = new JSONObject(myJSONString); 

Dann wird Ihr Programm im Debug-Modus ausgeführt werden.

Wenn es auf dieser Linie hält, bewegen Sie die Maus auf myJSONString und sehen, was der Wert ist. Es ist eine sichere Wette, dass es nicht das ist, was Sie erwarten.

+0

können Sie mir mehr über die Verwendung von Debugger erzählen? – 7rocker

+0

Dies ist nicht der richtige Ort dafür. Es gibt genügend Dokumentation und Online-Videos zu Debugging-Techniken: https://developer.android.com/studio/debug/index.html – mkazin

Verwandte Themen