Jedes mal Fehler und App stürzt ab

F

freshmojojo

Neues Mitglied
0
Moin,
und zwar hab ich seit tagen das Problem, dass immer wenn ich ein JSON Objekt Array usw. verwende meine App abstürzt. Nur was mache ich falsch?
Ich bekomme immer:
+
Code:
10-01 20:03:37.770  30147-30147/com.example.p.sql E/AndroidRuntime FATAL EXCEPTION: main
    Process: com.example.p.sql, PID: 30147
    java.lang.NullPointerException
            at com.example.p.sql.MyActivity.setTextToTextView(MyActivity.java:33)
            at com.example.p.sql.MyActivity$GetAllNewsTask.onPostExecute(MyActivity.java:66)
            at com.example.p.sql.MyActivity$GetAllNewsTask.onPostExecute(MyActivity.java:53)
            at android.os.AsyncTask.finish(AsyncTask.java:632)
            at android.os.AsyncTask.access$600(AsyncTask.java:177)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5139)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)


Der ursprüngliche Beitrag von 20:21 Uhr wurde um 20:23 Uhr ergänzt:

Dies ist meine MainActivity bzw hier MyActivity:
Code:
public class MyActivity extends ActionBarActivity {

    private TextView responseTextView;

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

        this.responseTextView = (TextView) this.findViewById(R.id.responseTextView);

        new GetAllNewsTask().execute(new ApiConnector());

    }

    public void setTextToTextView(JSONArray jsonArray)
    {
        String s  = "";
        for(int i=0; i<jsonArray.length();i++){

            JSONObject json = null;
            try {
                json = jsonArray.getJSONObject(i);
                s = s +
                        "Titel : "+json.getString("title")+"\n"
                        +json.getString("news")+"\n"+
                        "ID : "+json.getInt("id")+"\n"+
                        "IMG Link : "+json.getString("img")+"\n\n";
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

        this.responseTextView.setText(s);

    }

    private class GetAllNewsTask extends AsyncTask<ApiConnector,Long,JSONArray>
    {
        @Override
        protected JSONArray doInBackground(ApiConnector... params) {

            // it is executed on Background thread

            return params[0].GetAllNews();
        }

        @Override
        protected void onPostExecute(JSONArray jsonArray) {

            setTextToTextView(jsonArray);


        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
 
Hast du das mal debuggt, die Fehlermeldung spricht dafür das die Variable jsonArray nicht initialisiert wurde.
 
ich habe die app gerade mal debuggt aber das einzige was sich ändert, ist dass der Debugger kurz wartet und dann ich am ende diese Fehlermeldung wie oben bekomme. Man muss dazu sagen ich bin noch ein relativer Anfänger im bereich der Android Apps.

Der ursprüngliche Beitrag von 20:49 Uhr wurde um 20:50 Uhr ergänzt:

Ich nutze das neue AndroidStudio und Debugge direkt auf mein GalaxyS3 mit Andoid 4.4
 
ok ich benutze eclipse aber egal, setz mal einen Haltepunkt an folgender Stelle:
Code:
            setTextToTextView(jsonArray);
in der onPostExecute Methode. Ab da geh dann die setTextToTextView Methode Schrittweise durch (in Eclipse heißt es "step into" wird bei Android Stutio bestimmt so ähnlich heißen. Du kannst dir dann die Werte des der Variablen anzeigen lassen und siehst genau an welcher Zeile im Code der Fehler auftritt.
 
Ich habe jetzt mal einen Breakpoint gesetzt und gleich unten in der Konsole den Wert für jsonArray bekommen der nämlich null entspricht...
 
dann ist wie vermutet dein jsonArray nicht richtig befüllt. vermutlich liefert
params[0].GetAllNews() auch null zurück und der ApiConnector verhält sich anders als du es erwartest.
 
Direkt nach der for schleife in setTextToTextView stürzt die App ab.

Der ursprüngliche Beitrag von 21:33 Uhr wurde um 21:33 Uhr ergänzt:

Code:
public class ApiConnector {

    public JSONArray GetAllNews(){

        //link zur php Datei die alle News aus der DB ausliest
        String url = "http://192.168.2.118/apptest/GetAllNews.php";

        // Get HttpResponse Object from url.
        // Get HttpEntity from Http Response Object

        HttpEntity httpEntity = null;

        try
        {

            DefaultHttpClient httpClient = new DefaultHttpClient();  // Default HttpClient
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);

            httpEntity = httpResponse.getEntity();

        } catch (ClientProtocolException e) {

            // Signals error in http protocol
            e.printStackTrace();

            //Log Errors Here


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


        // Convert HttpEntity into JSON Array
        JSONArray jsonArray = null;

        if (httpEntity != null) {
            try {
                String entityResponse = EntityUtils.toString(httpEntity);

                Log.e("Entity Response  : ", entityResponse);

                jsonArray = new JSONArray(entityResponse);

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

        return jsonArray;

    }

}
 
in der if Abfrage hast du eine Log Ausgabe, wird die angezeigt?
 
ja ich bekomme diese Ausgabe:
Code:
10-01 21:39:48.265    2446-2467/com.example.p.sql E/Entity Response  : [ 10-01 21:39:48.265  2446: 2467 W/System.err ]
    org.json.JSONException: End of input at character 0 of
ich weis nicht genau wie ich das zu interpretieren habe... aber eine Ausgabe ist da
 
entityResponse beinhaltet also auch schon eine Fehlermeldung... möglicherweise ist in deinem PHP Skript was falsch? Hast du das mal in einem Browser ausgeführt und geguckt, was da ausgegeben wird?
 
stimmt! da habe ich einen Fehler drinne :unsure: aber ich habe den behoben. Doch nun sagt er er könne das nicht in ein jsonArray gepackt werden:
Code:
W/System.err org.json.JSONException: Value {"img":"Testbild","id":55,"news":"Testtitelnews","title":"testTitel"} of type org.json.JSONObject cannot be converted to JSONArray
 
Ich glaube du musst erst ein JSONObject erzeugen und dann dadrauf getJSONArray aufrufen (bin mir nicht sicher). Kann ich mal die BrowserAusgabe von deinem PHP Skript sehen
 
Code:
{"img":"Testbild","id":55,"news":"Testtitelnews","title":"testTitel"}

Das ist kein JSON-Array. Arrays sind mit eckigen Klammern, normale JSON-Objekte mit geschweiften Klammern. Die äusserste Schicht muss ein JSON-Objekt sein, Arrays sind erst innerhalb erlaubt (Edit: sorry, stimmt nicht, siehe Antwort von kosmus ;)). Dein JSON sollte so also korrekt sein, nur musst du die Verarbeitung in deiner App von JSONArray auf JSONObject ändern.
 
Zuletzt bearbeitet:
Nicht wenn er mehr news Einträge un der DB hat, deshalb wollte ich die ganze Ausgabe des PHP script sehen.
 
  • Danke
Reaktionen: Zoopa
Ich bin momentan nicht zuhause werde nacher aber den aktuellen Stand posten.
 
kosmus schrieb:
Nicht wenn er mehr news Einträge un der DB hat, deshalb wollte ich die ganze Ausgabe des PHP script sehen.

oh stimmt natürlich, JSON darf mit einem Array beginnen :thumbup: Irgendwie hatte ich das total falsch im Kopf.
 

Ähnliche Themen

S
Antworten
8
Aufrufe
527
swa00
swa00
Manny87
  • Manny87
Antworten
11
Aufrufe
190
swa00
swa00
E
  • evgkop
Antworten
1
Aufrufe
70
swa00
swa00
Zurück
Oben Unten