Android HttpClient, DefaultHttpClient, HttpPost
Wie schicke ich einen string-Daten ( JSONObject.toString()
), um eine url. Ich will schreiben Sie eine statische Methode in eine util-Klasse, dies zu tun. Ich möchte die Signatur der Methode werden wie folgt
public static String postData (String url, String postData) throws SomeCustomException
Was sollte das format der Zeichenfolge url
Den Rückgabe-String ist die Antwort des Servers als string-Darstellung von json-Daten.
BEARBEITEN
Bestehenden Verbindung util
package my.package;
import my.package.exceptions.CustomException;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
public class ConnectionUtil {
public static String postData(String url, String postData)
throws CustomException {
//Create a new HttpClient and Post Header
InputStream is = null;
StringBuilder sb = null;
String result = "";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost();
httppost.setHeader("host", url);
Log.v("ConnectionUtil", "Opening POST connection to URI = " + httppost.getURI() + " url = " + URLDecoder.decode(url));
try {
httppost.setEntity(new StringEntity(postData));
//Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
e.printStackTrace();
throw new CustomException("Could not establish network connection");
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "utf-8"), 8);
sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line = "0";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
throw new CustomException("Error parsing the response");
}
Log.v("ConnectionUtil", "Sent: "+postData);
Log.v("ConnectionUtil", "Got result "+result);
return result;
}
}
Logcat-Ausgabe
10-16 11:27:27.287: E/log_tag(4935): Fehler im http-Verbindung java.lang.NullPointerException
10-16 11:27:27.287: W/System.err(4935): java.lang.NullPointerException
10-16 11:27:27.287: W/System.err(4935): bei org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:496)
10-16 11:27:27.307: W/System.err(4935): bei org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-16 11:27:27.327: W/System.err(4935): bei org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
10-16 11:27:27.327: W/System.err(4935): bei in.gharpay.zap.- integration.ConnectionUtil.postData(ConnectionUtil.java:92)
10-16 11:27:27.327: W/System.err(4935): bei in.gharpay.zap.- integration.ZapTransaction$1.doInBackground(ZapTransaction.java:54)
10-16 11:27:27.327: W/System.err(4935): bei in.gharpay.zap.- integration.ZapTransaction$1.doInBackground(ZapTransaction.java:1)
10-16 11:27:27.327: W/System.err(4935): at android.os.AsyncTask$2.call(AsyncTask.java:185)
10-16 11:27:27.327: W/System.err(4935): bei java.util.gleichzeitige.FutureTask$Sync.innerRun(FutureTask.java:306)
10-16 11:27:27.327: W/System.err(4935): bei java.util.gleichzeitige.FutureTask.run(FutureTask.java:138)
10-16 11:27:27.327: W/System.err(4935): bei java.util.gleichzeitige.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
10-16 11:27:27.327: W/System.err(4935): bei java.util.gleichzeitige.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
10-16 11:27:27.327: W/System.err(4935): bei java.lang.Thread.run(Thread.java:1019)
10-16 11:27:27.327: V/log_tag(4935): could not establish network connection
- was ist das problem?
- Ich denke, es gibt einige problem mit der POST-Methode senden StringEntity auf den server Ende.. Schauen Sie sich meine Letzte Antwort und sehen, ob es funktioniert..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, in deinem code ist das grundlegende problem wird dadurch verursacht, wie Sie mit
StringEntity
zuPOST
Parameter zu Ihrer url. Überprüfen Sie, ob der folgende code hilft bei der Buchung Ihre Daten an den server mithilfeStringEntity
.Hoffe, dies hilft, Ihr problem zu lösen. Danke.
http://xyz.mysite.com/some_page.php/
- und post-Daten. Muss ich auch den port angeben?Gut, hier sind meine Gedanken auf deine Frage:-
Zunächst sollten Sie einfach senden Sie die Daten an den server mithilfe von
POST
Methode. Seine einfache und absolut möglich in Android auch. Ein einfaches code-snippet für das sendenPOST
Daten werden wie:Der obige code sendet Daten an ein PHP-Skript
postdata
auf Ihrem server.Nächsten, für die Analyse der
JSON
Daten vom server gesendet wird, können Sie eineJSONParser
und dann leicht verwenden Sie es als pro Ihre Bedürfnisse. Sie können die Antwort, die vom server zurückgegeben werden, mithilfe des folgenden Codes:Hoffe, das hilft. Danke.
UrlEncodedFormEntity
ich bin vorbei einnew StringEntity
mit meinem String-Daten. Ich bekomme eineNullPointerException
. Nur anfügen, mein logcat Ausgabe auf die Frage.versuchen mit dieser Methode, wo strJsonRequest ist die json-string, den Sie buchen möchten und die strUrl ist die url, auf die Sie buchen wollen, strJsonRequest
und die Methode convertStreamToString() ist wie folgt
converStreamToString
?MalformedURLException
Je nachdem, wie Sie Ihre server-side-code eingerichtet ist, ein Beispiel-format der url, wo Ihr server über eine php-Seite verarbeiten der API-Aufruf wäre:
Wenn Ihr mit einem post-Verbindung Sie können einfach sagen:
übergeben und Ihre post-Parameter, d.h. der json-string
Hier ist ein tolles tutorial auf wie dies zu tun:
http://yoururl.com/demo.php?jsondata=postData
http://www.example.com/my_page.php
, richtig?