Ben şu anda gelen ve Android uygulama bir php sunucusu (ikisi de benim tarafından kontrol edilir) için bazı veri göndermeye çalışıyorum.
App bir formda toplanan verilerin çok şey var, bu veritabanına yazılır. Bu, tüm işleri.
Benim ana kodda, öncelikle ben (bu örneğin burada aşağı kestik) bir JSONObject oluşturun:
JSONObject j = new JSONObject();
j.put("engineer", "me");
j.put("date", "today");
j.put("fuel", "full");
j.put("car", "mine");
j.put("distance", "miles");
Sonraki Ben göndermek için nesne üzerinden geçmek ve yanıtı alırsınız:
String url = "http://www.server.com/thisfile.php";
HttpResponse re = HTTPPoster.doPost(url, j);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}
HTTPPoster sınıfı:
public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost request = new HttpPost(url);
HttpEntity entity;
StringEntity s = new StringEntity(c.toString());
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
entity = s;
request.setEntity(entity);
HttpResponse response;
response = httpclient.execute(request);
return response;
}
Bu bir tepki alır, ama sunucu 403 dönen - Yasak yanıtı.
Ben doPost işlevini biraz değiştirerek denedim (ben farklı veri ile aynı formda temelde 3, göndermek için bir çok var dediğim gibi bu, aslında biraz daha iyi - yani 3 JSONObjects, her bir form giriş için bir tane oluşturun - girişleri I) kullanıyorum DB yerine statik örnek geliyor.
Öncelikle ben biraz üzerinde arama değişti:
String url = "http://www.myserver.com/ServiceMatalan.php";
Map<String, String> kvPairs = new HashMap<String, String>();
kvPairs.put("vehicle", j.toString());
// Normally I would pass two more JSONObjects.....
HttpResponse re = HTTPPoster.doPost(url, kvPairs);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}
Ok doPost işlevine kadar değişir:
public static HttpResponse doPost(String url, Map<String, String> kvPairs) throws ClientProtocolException, IOException
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
if (kvPairs != null && kvPairs.isEmpty() == false)
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(kvPairs.size());
String k, v;
Iterator<String> itKeys = kvPairs.keySet().iterator();
while (itKeys.hasNext())
{
k = itKeys.next();
v = kvPairs.get(k);
nameValuePairs.add(new BasicNameValuePair(k, v));
}
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
}
HttpResponse response;
response = httpclient.execute(httppost);
return response;
}
Tamam Yani bu bir yanıt verir 200
int statusCode = re.getStatusLine().getStatusCode();
Ancak sunucu üzerinde alınan veriler JSON dizeye çözümlenen olamaz. Bu kötü Ben (bu JSON kullanmış ilk kez) düşünüyorum biçimlendirilir:
Php dosyasında I $ _POST ['araç'] üzerinde bir yankı yaparsanız ben şu olsun:
{\"date\":\"today\",\"engineer\":\"me\"}
Herkes yanlış gidiyorum söyle, ya da ben ne çalışıyorum başarmak için daha iyi bir yolu olup olmadığını? Can Umarım yukarıdaki mantıklı!