Wie sende ich JSON mit aquery an PHP

  • 5 Antworten
  • Neuester Beitrag
Diskutiere Wie sende ich JSON mit aquery an PHP im Android App Entwicklung im Bereich Betriebssysteme & Apps.
M

magifrei

Neues Mitglied
Hallo,

ich habe mir einen JSON Parser gebastelt, der über ein PHP Skript Daten aus meiner MySQL-Datenbank in eine App einliest.
Lief toll auf meinem alten Galaxy. Dann bekam ich ein Nexus 4 und auf einmal ging dank neuer Restriktionen gar nichts mehr. Also diesen Parser irgendwie in einen AsyncTask rein gefriemelt was mehr oder wenig gut funktioniert hat. Aber immerhin lief's...
Irgendwann bin ich dann auf die aQuery-Bibliothek gestoßen, die mir meine Daten sehr komfortabel in meine App gezogen hat. Super cool dachte ich, löschte meinen Parser und baute meine App auf die Verwendung von aQuery um.

Jetzt muss ich Daten aus meiner App in die Datenbank hinein bekommen und ich habe keinen Plan wie ich das anstellen soll. Die Beispiele im Netz sind alle nicht in einem AsyncTask und irgendwie macht es jeder anders, so dass ich nicht durchblicke, wie ich überhaupt anfangen soll.

Kann man für diesen "Post" auch aQuery verwenden? Das wäre natürlich herrlich. Ich habe in der Dokumentation dazu jedoch nichts gefunden; vielleicht suche ich einfach nach dem falschen Begriff.
Kennt sich jemand mit aQuery aus und kann mir weiterhelfen, bzw hat jemand einen leicht zu verstehendes Beispiel, wie ich Daten asynchron aus meiner App in meine Datenbank bekomme?

Ich dreh hier echt durch. Bei dem Wetter schwitzt man nur durchs Rumsitzen vor dem PC schon und wenn man dann auch nach stundenlanger Suche nichts schafft ist das echt deprimierend :(
 
Z

Zoopa

Stammgast
Ich habe aQuery noch nie verwendet, aber laut Doku sollten POST-Requests kein Problem sein. Der Teil HTTP POST (Custom Entity) scheint sicher mal interessant zu sein.

Bisschen ungetesteter Code, wie ich mir das vorstellen könnte:
Code:
//Dein JSON Object
JSONObject testJson =new JSONObject();
testJson.put("hallo", new Integer(123));

//Eine Entity mit JSON als Inhalt
HttpEntity entity = new StringEntity(testJson.toString());

//Param-Map zusammenbauen, wie im aQuery Wiki beschrieben
Map<String, Object> params = new HashMap<String, Object>();
params.put(AQuery.POST_ENTITY, entity);

//siehe Doku
myAqueryObject.ajax(.........);
Natürlich muss dann dein PHP-Script auf dem Server das eigentliche speichern in die DB noch erledigen. Evtl. könnte dieser Eintrag von Stackoverflow noch hilfreich sein. Da wird zwar kein aQuery verwendet, aber es zeigt trotzdem den Ablauf und ein Beispiel des PHP-Scripts
 
M

magifrei

Neues Mitglied
Oh man, steht ja echt in der Dokumentation. Ich hab's bestimmt zig mal gelesen und trotzdem übersehen. Die Hitze macht einen ganz breesig im Kopp :sleep:
Danke für den Hinweis.
 
M

magifrei

Neues Mitglied
Ich muss nochmals um Hilfe bitten. Indem ich auf PHP Seite meinen Input noch utf8-entschlüssel (der string sieht danach genauso aus wie vorher, aber es funktioniert) habe ich es nach reichlich Kopfzerbrechen nun auch hinbekommen Umlaute aus meiner App zur Datenbank zu transportieren.

PHP:
Code:
$json = utf8_encode(file_get_contents('php://input'));
Probleme bereitet mir aber bspw. das Sonderzeichen €, welches immer als Fragezeichen ankommt. Ich weiß nicht genau, ob das Problem nun auf Android-Seite beim Erstellen des Posts, oder auf PHP-Seite beim Auslesen liegt.

Auf Android-Seite sieht das ca. so aus (zusammengefast):
Code:
// Build JSON
JSONObject editJobJson = new JSONObject();

try {
   editJobJson.put("Text", etText.getText().toString().replace("€", "EURO"));
}
catch (JSONException e) {
   Log.e("ERROR", "ERROR IN CODE: " + e.toString());
   e.printStackTrace();
}

// An entity to contain json
HttpEntity entity = null;
try {
   entity = new StringEntity(editJobJson.toString());
}
catch (UnsupportedEncodingException e) {
   e.printStackTrace();
}
										
// Build param-map
Map<String, Object> params = new HashMap<String, Object>();
params.put(AQuery.POST_ENTITY, entity);
											   
// POST
aq.ajax(url, params, JSONObject.class, new AjaxCallback<JSONObject>() {
.
.
.

Wie man sieht ersetze ich hier schon '€' verzweifeltermaßen durch 'EURO'.
Hat jemand eine Idee, wie ich dieses Problem beheben kann oder eine Vermutung, auf welcher Seite das Problem liegt?
 
C

cocojack42

Ambitioniertes Mitglied
M

magifrei

Neues Mitglied
Und wie? Die Daten kommen doch aus meiner App als Post in Form eins JSON Strings. Was meine PHP-Seite zurückgibt sollte doch eigentlich egal sein...

Andersherum, beim Übertragen aus der Datenbak ZUR App, habe ich keine Probleme mit dem €-Zeichen.
Ich müsste also aus meiner App heraus, eine Seite aufrufen und den Verkehr mitsniffen, oder?

Verstehe ich die von Dir verlinkte Seite falsch?
Wenn ich den Link zu meinem PHP-Skript eingebe, erscheint zumindest:

Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7
Accept-Language: de,en;q=0.7,en-us;q=0.3