Ich brauche Hilfe bei JSON und PHP

  • 40 Antworten
  • Letztes Antwortdatum
J

Jojo1992

Gast
Also ich habe eine PHP Datei, welche folgenden JSON code zurückgibt:
über folgenden Code:
PHP:
echo json_encode(array('Fragen'=>$product));
z.B:
PHP:
{"Fragen":{"id":"1","frage":"Wie viel Gramm wiegt eine Packung Mehl?","loesung":"1000"}}
Dann habe ich meine Android App mit folgendem Code:

Code:
mButton_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

                StrictMode.setThreadPolicy(policy);
                HttpClient httpclient = new DefaultHttpClient();

                HttpGet httpget = new HttpGet("***********URL****");

                
                HttpResponse response;
                try {
                    response = httpclient.execute(httpget);

                    HttpEntity entity = response.getEntity();

                    if (entity != null) {
                        InputStream instream = entity.getContent();
                        String result= convertStreamToString(instream);

                        JSONObject jsonObject = new JSONObject(result).getJSONObject("Fragen");
                        int id = jsonObject.getInt("id");
                        String frage = jsonObject.getString("frage");
                        int loesung = jsonObject.getInt("loesung");
                        String str = "ID:" + id + "\nFrage:" + frage + "\nLösung:" + loesung;
                        mTextView.setText(str);

                        instream.close();
                    }


                } catch (Exception e) {
                    Log.e("Error",e.toString());
                }
                try {

                    JSONObject jsonObject = new JSONObject(result).getJSONObject("Fragen");
                    int id = jsonObject.getInt("id");
                    String frage = jsonObject.getString("frage");
                    int loesung = jsonObject.getInt("loesung");
                    String str = "ID:" + id + "\nFrage:" + frage + "\nLösung:" + loesung;
                    mTextView.setText(str);

                } catch (JSONException e) {

                    Toast.makeText(MainActivity.this, "Fehler", Toast.LENGTH_SHORT).show();

                }
            }
        });
    }
Das JSON Encoden funktioniert wenn ich in die Variable "String result" direkt mit dem JSON Code fülle, also muss mein Fehler irgendwo in dem Teil sein wo ich versuche den JSON String zu bekommen...
Kann mir bitte jemand helfen?
 
Hallo Jojo1992,

bitte beschreib genau, was nicht geht.
Du nennst zwar die Stelle, aber nicht, was in deinem String steht, wenn du es nicht mit JSON Code füllst.
Stürzt die App ab? Gibt es eine Fehlermeldung?
 
Lass mich raten:
Code:
import im.gui.thread.darf.man.keinen.netzwerkverkehr.machen.*;
 
  • Danke
Reaktionen: DieGoldeneMitte
StefMa schrieb:
Dort steht ganz klar dass man Volle Imports benutzen soll.

Da siehst du, was für ein Rebell ich bin :D
 
  • Danke
Reaktionen: StefMa
Kardroid schrieb:
Hallo Jojo1992,

bitte beschreib genau, was nicht geht.
Du nennst zwar die Stelle, aber nicht, was in deinem String steht, wenn du es nicht mit JSON Code füllst.
Stürzt die App ab? Gibt es eine Fehlermeldung?

Es passiert einfach garnichts :D
Anfangs ist die App noch abgestürzt darauf hin habe ich nochmal in den Tutorials nachgeschaut und etwas geändert, jetzt passiert einfahc nichts mehr nach dem man den Button geklickt hat.

Der ursprüngliche Beitrag von 16:06 Uhr wurde um 16:07 Uhr ergänzt:

DieGoldeneMitte schrieb:
Lass mich raten:
Code:
import im.gui.thread.darf.man.keinen.netzwerkverkehr.machen.*;

Stimmt abe dafür habe ich doch die ersten beiden Zeilen, um diese Sperre zu umgehen.
Wie müsste ich es denn sonst machen?!
 
Troztdem solltest du es gleich richtig machen:
mit einem AsyncTask o.a.

alles andere ist K A C K E ! ! !
:lol:

lg. Dagobert
 
AsyncTasks sind aber auch total retro und mit Problemen behaftet. Man muss sich um das Caching kümmern, verschiedene Android Versionen verhalten sich unterschiedlich, Bildschirmdrehungen erzeugen Probleme ... die Liste ist ewig. Noch dazu sind sie nicht wirklich praktisch zu nutzen.

Mit Ion z.B. würde der ganze Code anstelle des AsyncTask so aussehen

Code:
Ion.with(context)
.load("http://blablanlablal")
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
   @Override
    public void onCompleted(Exception e, JsonObject result) {
        // hier wird die empfangene Json ausgewertet
    }
});

Man muss ja nicht jedes mal das Rad neu erfinden.
 
  • Danke
Reaktionen: DieGoldeneMitte
Ui, das Ion sieht ja schick aus. Danke für das Fundstück :D
 
StefMa schrieb:
Und für Anfäger noch den Link: https://github.com/koush/ion

+ Eine beschreibung wie man Libs einbindet ^^

Das klingt ja wirklich sehr verlockend und einfach!
Nur wie binde ich die Datenbank ein?

Ich habe die zwei Dateien:

androidasync-1.2.4.jar
und
ion-1.2.4-jar

runtergeladen.
P.S. Ich arbeite mit AndroidStudio

@JustInTime
Für dich noch ein Danke, ich habe meine Brille nicht auf und finde den Button dafür leider nicht...:cool2:
 
Zuletzt bearbeitet von einem Moderator:
StefMa schrieb:

Danke das hat funktioniert!

Der ursprüngliche Beitrag von 16:11 Uhr wurde um 16:35 Uhr ergänzt:

Code:
public void onCreate(Bundle saveInstanceState) {

        mTest = (TextView)findViewById(R.id.test2);

        super.onCreate(saveInstanceState);
        setContentView(R.layout.games);

        Intent i = getIntent();
        String nick = i.getStringExtra("nick");
        mTest.setText(nick);

        Ion.with([COLOR=Red]context[/COLOR])
                .load("http://example.com/thing.json")
                .asJsonObject()
                .setCallback(new FutureCallback<JSONObject>() {
                    @Override
                    public void onCompleted(Exception e, JSONObject result) {
                        // do stuff with the result or error
                    }
                });


    }

was muss ich mit dem context machen? Das ist bei mir rot und zeigt einen Fehler an: can't resolve symbole context
 
Naja du musst einen Context übergeben in dem die Anfrage laufen soll z.B. getActivity().
 
JustinTime schrieb:
Naja du musst einen Context übergeben in dem die Anfrage laufen soll z.B. getActivity().

mit getActivity kommt auch can resolve the methode

das ganze läuft in der games.java nicht in der MainActivity.java
 
Ich nehme meistens getApplicationContext()
Klappt fast immer :D
 
  • Danke
Reaktionen: Jojo1992
PhillippOh schrieb:
Ich nehme meistens getApplicationContext()
Klappt fast immer :D

Danke! :D

Code:
@Override
    public void onCreate(Bundle saveInstanceState) {

        mTest = (TextView)findViewById(R.id.test2);

        super.onCreate(saveInstanceState);
        setContentView(R.layout.games);

        Intent i = getIntent();
        String nick = i.getStringExtra("nick");
        mTest.setText(nick);

        Ion.with(getApplicationContext())
                .load("http://example.com/thing.json")
                .asJsonObject()
                .setCallback(new FutureCallback<JSONObject>() {
                    @Override
                    public void onCompleted(Exception e, JSONObject result) {
                       [COLOR=Lime] JSONObject jsonObject = new JSONObject(result).getJSONObject("user");[/COLOR]
                        [COLOR=Red]games_n = jsonObject.getString("games");
                        games_up = jsonObject.getString("games_up");
                        coins = jsonObject.getInt("coins");[/COLOR]
                    }
                });
    }
Ich brauche jetzt ja noch irgendwie meine JSON String also wo der Code drinnen ist, wie komme ich an diesen?
Bei der HTTP Methode hatte ich dafür eine function die das konvertiert...

Der ursprüngliche Beitrag von 17:35 Uhr wurde um 18:14 Uhr ergänzt:

Code:
games_n = result.get("games");

So geht es leider auch nicht
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

4
Antworten
10
Aufrufe
1.080
jogimuc
J
Zurück
Oben Unten