2015-04-27 2 views
0

Я пытаюсь загрузить файл 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"; 
} 
} 
+0

Похоже, что ошибка происходит на стороне сервера. Вам нужно сузить, что вызывает его: этот $ user пуст или db_query не удалось? – inmyth

+0

ну не знаю. Но вы уверены, что эта ошибка на стороне сервера? Как я могу отладить скрипт php? потому что это не мой сервер – Traabefi

+0

Потому что вы получаете ответ от сервера, который говорит «false». Также возможно, что вы не создадите свой json, как ожидалось на сервере. Поэтому в основном вам нужно отлаживать этот сервер, чтобы узнать, как он обрабатывает ваш запрос. Если вы не можете изменить php, вы не можете его отладить. – inmyth

ответ

0

Вы можете получить быстрый доступ к серверу (PHP файл сценария URL) и установить parems в запросе и сделать различные проверки отладки это может помочь тебе.

0

В принципе, произошла простая ошибка, которая вызывала всю эту проблему. Я использовал StringEntity, и я положил вещь «json =». И это то, что серверу не понравилось. Вот фрагмент рабочего кода:

@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.toString()); 
     post.addHeader("Content-Type", "application/json"); 
     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; 
} 
Смежные вопросы