2014-02-05 3 views
1

UPDATE 3HttpURLConnection ответ возвращается

Все работает сейчас. Я использовал this и this, вместо того, что я использовал для POST.

UPDATE 2

Я только заметил, что если я кладу обновления на нисходящем порядке, кажется, лучше организованы.

Я отредактировал свой код в своем OP (внизу), добавил несколько комментариев и заменил считыватель входного потока ReadHttpResponse(String url) от here. Это заставило меня разделить мой PHP-скрипт на update.php и get.php вместо updateandget.php.

Оказалось, что get.php работает нормально, в ограниченном смысле, что он просто запрашивает данные (не публикуя никаких значений). Файл update.php или Java, обрабатывающий соединение с этим URL-адресом, каким-то образом запутывается.

По крайней мере, я определил, что я не размещаю правильно. Я также обновил OP, чтобы показать update.php.

OP

Это мой код работает на doInBackground() команды AsyncTask

try{ 
     //HttpURLConnection<-url.openConnection() 
    URL url = new URL(address); 
    HttpURLConnection conn =(HttpURLConnection) url.openConnection(); //remember to close 
    conn.setReadTimeout(10000); 
    conn.setConnectTimeout(15000); 
    conn.setRequestMethod("POST"); 
    conn.setDoInput(true); 
    conn.setDoOutput(false); 
    // Write data to Server 
     //exctract parameters 
    String username = (String)arg0[0]; 
    String lastLong = (String)arg0[1]; 
    String lastLat = (String)arg0[2]; 
     //encode parameters 
    String data = URLEncoder.encode("username", "UTF-8")+ "=" + URLEncoder.encode(username, "UTF-8"); 
    data += "&" + URLEncoder.encode("lastLong", "UTF-8")+ "=" + URLEncoder.encode(lastLong, "UTF-8"); 
    data += "&" + URLEncoder.encode("lastLat", "UTF-8")+ "=" + URLEncoder.encode(lastLat, "UTF-8"); 
     //Build outputstream handler (socket?) 
    DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); 
     //write,flush,close 
    wr.writeBytes(data); 
    wr.flush(); 
    wr.close(); 
     // Read Server Response 
    //BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    //StringBuilder sb = new StringBuilder(); 
    //String line = null; 
    //String returnmessage=""; 
    //while((line = reader.readLine()) != null) 
    //{ 
    // returnmessage="There is something at least"; 
    // sb.append(line); 
    // break; 
    //} 
    //reader.close(); 
    conn.disconnect(); 

    //return returnmessage; 
    return ReadHttpResponse("http://www.pixeldonut.com/testing/tutorial/get.php"); 
}catch(Exception e){ 
    return new String("Exception: " + e.getMessage()); 
} 

Нет проблем чтения (или с ReadHttpResponse). Проблемы со всем остальным, по-видимому.

update.php:

<?php //lastknownlocation updateandget 
//open con 
$con=mysqli_connect("details"); 
if (mysqli_connect_errno($con)) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    die(); 
} 
//=========================================================statistics snippet 
      if(array_key_exists('REMOTE_ADDR', $_SERVER)){ 
       $ip=$_SERVER['REMOTE_ADDR']; 
       $address=$_SERVER['SERVER_ADDR']; 
       if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)){ 
        $ip2=$_SERVER['HTTP_X_FORWARDED_FOR']; 
       }else{ 
        $ip2="_"; 
       } 
       $query="INSERT INTO statistics (ip,ip2,address) VALUES ("; 
       $query.="'$ip','$ip2','$address'"; 
       $query.=")";//echo $query; 
       $db_return=mysql_query($query); 
       if(!$db_return){ 
        //echo "Your entry was unsuccessfully logged."; 
       }else{ 
        //echo "Your entry was successfully logged."; 
       } 
      } 
      //============================================================================== 
    //update-insert 
$username = $_POST['username']; 
$param1= $_POST['param1']; 
$param2= $_POST['param2']; 
$query = "UPDATE users SET"; 
$query .=" param1='$param1'"; 
$query .=",param2='$param2' "; 
$query .="WHERE username='$username'";//echo $query; 
$result = mysqli_query($con,$query); 
if(!result){ 
    //couldnt find user, aborting 
    die(); 
} 


//close con 
mysqli_close($con); 
?> 

Спасибо за вашу неизменную поддержку и энтузиазм, Ebichuhamster.

+1

Это должно помочь. [отправка запроса по почте в java] (http://stackoverflow.com/questions/4205980/java-sending-http-parameters-via-post-method-easily) – MjZac

+0

@MjZac Я ценю ссылку. Я использую OutputStreamWriter, и ответ на этот вопрос предложил DataOutputStream. Я сейчас пытаюсь это сделать. – ebichuhamster

+0

@MjZac Это не сработало :( – ebichuhamster

ответ

1

Я вижу некоторые моменты, которые могут быть причиной проблемы. Или, по крайней мере, стоит посмотреть на то, чтобы избежать проблем в будущем:

Java

Реализация выглядит довольно хорошо. Я бы добавил код, чтобы проверить код состояния HTTP вашего запроса и добавить больше кода, чтобы убедиться, что соединения и потоки закрыты, даже если происходят ошибки. Я рекомендую использовать библиотеку абстракции вместо HttpURLConnection. Если вы выбрали DavidWebb, ваш код будет выглядеть следующим образом, и вы можете быть уверены, что все потоки закрыты, правильные заголовки устанавливаются и некоторые другие вещи:

String username = "scott"; 
String lat = "47.49706"; 
String lng = "12.63244"; 

Webb webb = Webb.create(); 

Response<String> response = webb 
     .post("http://my-server:8888/updateandget.php") 
     .param("username", username) 
     .param("param1", lng) 
     .param("param2", lat) 
     .readTimeout(10000) 
     .connectTimeout(15000) 
     .asString(); 

if (response.isSuccess()) { 
    String json = response.getBody(); 
    // go on 
} else { 
    // handle error 
    if (response.getStatusCode() >= 500) { 
     // a server error, in case of "503 Service Unavailable" retry later? 
    } 
} 

PHP

В ваш фрагмент регистрации, вы выводите echo "Your entry was unsuccessfully logged.";. Это приводит к некорректному JSON. Поскольку вы получаете только <br/>, это не ваша проблема.

Операция обновления выглядит правильно, хотя это может быть проблема безопасности, поскольку она открыта для SQL-инъекции.

заявление, чтобы получить результат, вероятно, 2 вопроса:

"SELECT username,param1,param2FROM table WHERE username!='$username'"; 
  • между Param2 и ОТ должен быть пробел
  • Вы, вероятно, не хотят, чтобы вернуть все строки не принадлежащие пользователь, не так ли? (Еще раз опасность SQL инъекций)

Найти решение

Я предлагаю вам сначала попытаться проверить достигнут ли ваш PHP скрипт, изменив его на то, что абсолютно ничего не делает, но возвращать некоторые статические Содержимое JSON (вы знаете структуру). Если это сработает, вы можете добавить все больше и больше заявлений и посмотреть, работает ли он.

0

имеют также те же проблемы, и я попытался с помощью:

DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); 

, и она работала. ранее я использовал только OutputStream, и он дал мне пустой $ _POST при отправке формы запроса моего приложения Android на мой сервер mysql (локальный).

Смежные вопросы