Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.92
Flash_8
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 3
#1

Отправка POST запроса серверу - Android

16.04.2013, 15:55. Просмотров 4638. Ответов 7
Метки нет (Все метки)

Здравствуйте. Пишу приложение для Android, которое получает данные о местонахождении и отправляет их на Web-сервер.

Данные о местонахождении получаю нормально. А вот при отправке данных на сервер возникает проблема: на сервер ничего не приходит.

Подскажите в чём проблема!

Заранее спасибо! )

Функция передачи - public static void sendData.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
 package com.arish;
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyStore;
import java.security.PublicKey;
 
import javax.net.ssl.HttpsURLConnection;
 
import org.apache.http.HttpConnection;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Window;
import android.widget.TextView;
 
 
public class GPSTestAction extends Activity implements LocationListener{
    
    private LocationManager myManager;
    
    public static    String res;
 
     static String ouTxt=" Server is unavailable.\n\n Check access to the Internet.";
     static String errorTxt="\nProgram error !\nRestart the program please.\n";
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        
        
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        sendData("http://my-gps-monitoring.ru/upload.php", "OK!");        
        
        //Связываем менеджер и сервис
        myManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        //Назначаем слушателя
        myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
        
    }
 
    public void onLocationChanged(Location location) {
    
    // TODO Auto-generated method stub
        TextView tx = (TextView) findViewById(R.id.tv1);
                
          ProgressDialog progressDialog;
          Handler progressHandler;
          String resultStr = new String(""); 
          
          sendData("http://www.my-gps-monitoring.ru/upload.php", "OK!");
              
         
          tx.setText("88Широта: "    + location.getLatitude()  + "\nДолгота: " + location.getLongitude() + 
                   "\nСкорость: " + location.getSpeed() + "\n" + "\n" + ouTxt );
  }
    
    public static void sendData (final String serverAddress, final String myString)
    {
        Runnable r = new Runnable() {
            public void run() {
                
                      StringBuffer requestBody = new StringBuffer();
                      
 
 
                      try {
                          URLConnection connection = null;
                          URL url = new URL(serverAddress);
                          connection = url.openConnection();
                          HttpURLConnection httpConnection = (HttpURLConnection) connection;
                          httpConnection.setRequestMethod("POST");
                          httpConnection.setUseCaches(false);
                          httpConnection.setDoOutput(true);
                          httpConnection.setDoInput(true);
                          httpConnection.setRequestProperty("Host", "igb.agri.gov.il");
                          httpConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2");
                          httpConnection.setRequestProperty("Accept", "text/html, application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
                        
 
                          //httpConnection.setRequestProperty("Content-Length", String.valueOf(myString)); //              
                          httpConnection.setRequestProperty("Accept-Language","he, utf-8;");//
                          httpConnection.setRequestProperty("Accept-Charset","utf-8"); //
                          
                          httpConnection.setRequestProperty("Accept-Encoding", "gzip, deflate");
                          httpConnection.setRequestProperty("DNT", "1");
                          httpConnection.setRequestProperty("Referer", "http://igb.agri.gov.il/");
                          httpConnection.setRequestProperty("Host", "igb.agri.gov.il");
                          httpConnection.setRequestProperty("Connection", "keep-alive");
                          httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                          requestBody.append( myString ); //добавление моих данных к запросу Post
                          // соединение
                          httpConnection.connect();
                          // отправка запроса
                          DataOutputStream dataOS = new DataOutputStream( httpConnection.getOutputStream());
                          dataOS.writeUTF(myString.toString()); 
                   
                          dataOS.writeUTF(myString.toString());
                          dataOS.flush();
                          dataOS.close();
                  
                  
                          // получение ответа сервера
                          int responseCode = httpConnection.getResponseCode();
                          if (responseCode == 200) { // если все прошло нормально(200), получаем результат
                              InputStream in = httpConnection.getInputStream();
                              InputStreamReader isr = new InputStreamReader(in, "UTF-8");
                              StringBuffer data = new StringBuffer();
                              int c;
                              while ((c = isr.read()) != -1) {  data.append((char) c);  }
                              
                              
                                                          ouTxt = new String(data.toString());
                          }  else  {                        ouTxt = "Server is unavailable.\nPlease try again."; }
                      } catch (MalformedURLException e) { ouTxt = errorTxt+"MalformedURLException:" + e.getMessage(); }
                        catch (IOException e) {              ouTxt = errorTxt+"IOException:" + e.getMessage(); Log.e("ERROR", e.getMessage());
                      } catch (Exception e) {             ouTxt = errorTxt+"Exception:" + e.getMessage();  }
                      requestBody = null;
                      System.gc();
                  };
            }; 
            new Thread(r).start();
 
    }
 
}

Вот код сервера

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
$filename = "datafile.txt";
 
 
$f = fopen($filename,"a");
printf($f,"Data received @ ".date(DATE_RFC822));
printf($f,"\n");
printf($f,'First Name:['.$_POST['MyString'].']');
print('First Name:['.$_POST['MyString'].']');
 
printf($f,"\n");
 
fclose($f);
print "SUCCESS";
?>
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
16.04.2013, 16:31     Отправка POST запроса серверу #2
может где-то падает в try?
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
16.04.2013, 17:47     Отправка POST запроса серверу #3
Flash_8, используй отладчик и смотри что отсылается и что сервер отвечает.

Добавлено через 4 минуты
и выведи исключения в логи так удобнее будет отлаживать
Flash_8
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 3
16.04.2013, 18:20  [ТС]     Отправка POST запроса серверу #4
Через отладчик смотрел - отсылается всё без ошибок. Но почему-то на сервер ничего не приходит.
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
16.04.2013, 18:39     Отправка POST запроса серверу #5
Flash_8, а ответ сервера нормальный приходит?
Flash_8
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 3
16.04.2013, 19:09  [ТС]     Отправка POST запроса серверу #6
С сервера тоже ничего не приходит...
c4sp3r
0x5B4C322291BD52AE
92 / 92 / 5
Регистрация: 04.03.2013
Сообщений: 295
16.04.2013, 19:28     Отправка POST запроса серверу #7
Flash_8, если браузером зайти:

запрос/ответ

GET http://www.my-gps-monitoring.ru/upload.php HTTP/1.1
Host: ...
User-Agent: Mozilla/5.0 ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: ...
Cookie: p=09ccb12be971347c784ed8ea600c7c38
DNT: 1
Connection: keep-alive

HTTP/1.1 200 OK
Date: Tue, 16 Apr 2013 15:12:35 GMT
Server: nginx
Content-Type: text/html
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.13
Cache-Control: no-cache, must-revalidate
Expires: Thu, 26 Jul 1990 05:00:00 GMT
Content-Encoding: gzip
Content-Length: 958
Keep-Alive: timeout=2, max=98
Connection: Keep-Alive

HTML5
1
2
3
4
<html><body><p>Resource id #2Resource id #2Resource id #2Resource id #2SUCCESS
...
</body>
</html>


Подобный ответ должен быть от сервера после POST запроса хотя бы HTTP/1.1 200 OK если нет значит данные не дошли до сервера и возможно даже соединения не было. Т.е. какой-то ответ должен быть если соединения до сервера происходит нормально.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2013, 01:19     Отправка POST запроса серверу
Еще ссылки по теме:

Android Ожидание ответа от запроса к серверу по сети
Отправка Post запроса в Android предложении Android
Android Отправка POST
Отправка post запросов на сервер Android
Отправка POST запроса Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
18.04.2013, 01:19     Отправка POST запроса серверу #8
а через HttpClient не пробовали?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");
 
try {
    // Add your data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("id", "12345"));
    nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
 
    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(httppost);
 
} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
} catch (IOException e) {
    // TODO Auto-generated catch block
}
Yandex
Объявления
18.04.2013, 01:19     Отправка POST запроса серверу
Ответ Создать тему
Опции темы

Текущее время: 20:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru