Я пытаюсь загрузить файл JSON на свой сервер, который использует PHP. Но ответ всегда ложный, и я не знаю, почему. Я попытался переключить порядок информации, но это не помогло.Загрузка Android JSON на сервер
Вот код моего метода:
public void uploadJSON(){
try {
JSONObject toSend = new JSONObject();
toSend.put("user", "guri1");
toSend.put("ts", System.currentTimeMillis()/1000L);
toSend.put("lat", 35.45);
toSend.put("lon", 48.4);
toSend.put("text", "Toto som poslal");
toSend.put("tags", "");
toSend.put("img", "");
JSONTransmitter transmitter = new JSONTransmitter();
transmitter.execute(new JSONObject[] {toSend});
} catch (JSONException e) {
e.printStackTrace();
}
JSONTransmitter в основном AsyncTask. Вот код для этого:
public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> {
String url = "MYURLISHERE";
@Override
protected JSONObject doInBackground(JSONObject... data) {
JSONObject json = data[0];
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 100000);
JSONObject jsonResponse = null;
HttpPost post = new HttpPost(url);
try {
StringEntity se = new StringEntity("json="+json.toString());
post.addHeader("content-type", "application/x-www-form-urlencoded");
post.setEntity(se);
HttpResponse response;
response = client.execute(post);
String resFromServer = org.apache.http.util.EntityUtils.toString(response.getEntity());
Log.i("Response from server", resFromServer);
} catch (Exception e) { e.printStackTrace();}
return jsonResponse;
}
А вот РНР:
function postevent(){
$data=json_decode(file_get_contents('php://input'), true);
$ts=$data["ts"]*1;
$lat=$data["lat"]*1;
$lon=$data["lon"]*1;
$user=mysql_real_escape_string($data["user"]);
$text=mysql_real_escape_string($data["text"]);
$tags=mysql_real_escape_string($data["tags"]);
$img=mysql_real_escape_string($data["img"]);
if ($user!=""){
$result=db_query("INSERT INTO events SET ts='$ts',lat='$lat',lon='$lon',user='$user',text='$text',tags='$tags',img='$img'");
} else { $result=FALSE; }
if($result==FALSE){
echo "false";
} else {
echo "true";
}
}
Похоже, что ошибка происходит на стороне сервера. Вам нужно сузить, что вызывает его: этот $ user пуст или db_query не удалось? – inmyth
ну не знаю. Но вы уверены, что эта ошибка на стороне сервера? Как я могу отладить скрипт php? потому что это не мой сервер – Traabefi
Потому что вы получаете ответ от сервера, который говорит «false». Также возможно, что вы не создадите свой json, как ожидалось на сервере. Поэтому в основном вам нужно отлаживать этот сервер, чтобы узнать, как он обрабатывает ваш запрос. Если вы не можете изменить php, вы не можете его отладить. – inmyth