Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.82
mizha
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
#1

Отправка POST запроса - Программирование Android

29.11.2013, 01:50. Просмотров 6548. Ответов 15
Метки нет (Все метки)

Здравствуйте! Решил попробовать написать приложение на Android. Задачу поставил такую, что надо отправить с android-а на сервер post запрос, но что-то видимо делаю не так, ниже приведу пример своего кода из Java и php. Что я не так делаю?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://127.0.0.1/all/index.php");
 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("login", "andro"));
    nameValuePairs.add(new BasicNameValuePair("text", "Привет!"));
    try {
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    } catch (UnsupportedEncodingException e) {
                        
         e.printStackTrace();
    }
 
    try {
        HttpResponse response = httpclient.execute(httppost);
    } catch (ClientProtocolException e) {
                        
        e.printStackTrace();
    } catch (IOException e) {
                        
        e.printStackTrace();
    }
PHP

PHP
1
2
3
4
5
6
$mylogin = $_POST['login'];
if($mylogin != null)
{
     $fp = fopen("counter.txt", "a"); 
     $test = fwrite($fp, $mylogin);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2013, 01:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отправка POST запроса (Программирование Android):

Отправка POST запроса - Программирование Android
Добрый день! столкнулся с проблемой, не могу отправить пост запрос, сваливаюсь на OutputStream os = con.getOutputStream(); в query...

Отправка POST запроса - Программирование Android
Здраствуйте, нужно на сайт отправить пост запрос з логином і паролем, потом сайт оддаст строку, ее нужно вивсти в текствів, у меня есть код...

Не работает отправка POST запроса - Программирование Android
try{ HttpClient httpclient = new DefaultHttpClient(); //YOUR PHP SCRIPT ADDRESS HttpPost httppost...

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

Отправка Post запроса в Android предложении - Программирование Android
Есть определенная php страница надо отправить на нее Post запрос из Android приложения Например на такую страниц...

Отправка POST - Программирование Android
Дайте пожалуйства рабочий пример отправки POST запроса на сервер. ПЕрекопал пол интернета не чего не работает из примеров. Версия от...

15
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
29.11.2013, 09:52 #2
в отдельном потоке:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
                    URL url = new URL("http://api.ololo.net/user/info/?email="
                            + sPref.getString("mail", "") + "&pass="
                            + sPref.getString("pass", ""));
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
 
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(con.getInputStream()));
                    StringBuilder sb = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {                               //считываем ответ с сервера в строку
                        sb.append(line + "\n");
                    }
                    br.close();
а на пхп вы должны написать соответствующие апи, отвечающее на подобные запросы .
1
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
29.11.2013, 13:00 #3
mizha, код правильный. Запускайте его в отдельном потоке и добавьте обратную связь с сервером:
Java
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
new Thread(new Runnable() {
 
    @Override
    public void run() {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://127.0.0.1/all/index.php");
 
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("login", "andro"));
        nameValuePairs.add(new BasicNameValuePair("text", "Привет!"));
        try {
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
 
        try {
            HttpResponse response = httpclient.execute(httppost);
            String request = inputStreamToString(response.getEntity().getContent());
            Log.v("request", request + "!");
 
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }
 
    private String inputStreamToString(InputStream is) throws IOException {
        String line = "";
        StringBuilder total = new StringBuilder();
 
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
 
        while ((line = rd.readLine()) != null)
            total.append(line);
 
        return total.toString();
    }
 
}).start();
PHP
1
2
3
4
5
6
7
if (isset($_POST['login']) && isset($_POST['text'])) {
    $fp = fopen("counter.txt", "a"); 
    $test = fwrite($fp, $mylogin);
    echo "true";
} else {
    echo "false";
}
и проверьте манифест на наличие permission'а:
XML
1
<uses-permission android:name="android.permission.INTERNET" />
Если ошибка повторится, выкладывайте лог, будем разбираться..
1
mizha
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
29.11.2013, 14:52  [ТС] #4
Спасибо, что сказали по поводу permission'а, потому что я о нём не знал и конечно у меня его не было в манифесте)) Буквально второй день, как пробую, что-то запилить на этом всём...

Я ниже приведу пример всего своего класса, т.к. я добавил поток, но это мне особо не помогло.
Java
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
public class MainActivity extends Activity {
 
    
    Button btn;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btn = (Button)findViewById(R.id.button1);
        
        OnClickListener oclBtn = new OnClickListener(){
            
            public void onClick(View v){
                new Thread(new Runnable() {
                     
                    @Override
                    public void run() {
                        HttpClient httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost("127.0.0.1/all/index.php");
                 
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                        nameValuePairs.add(new BasicNameValuePair("login", "andro"));
                        nameValuePairs.add(new BasicNameValuePair("text", "Привет!"));
                        try {
                            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                 
                        try {
                            HttpResponse response = httpclient.execute(httppost);
                            String request = inputStreamToString(response.getEntity().getContent());
                            Log.v("request", request + "!");
                 
                        } catch (ClientProtocolException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                 
                    }
                 
                    private String inputStreamToString(InputStream is) throws IOException {
                        String line = "";
                        StringBuilder total = new StringBuilder();
                 
                        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
                 
                        while ((line = rd.readLine()) != null)
                            total.append(line);
                 
                        return total.toString();
                    }
                 
                }).start();
             }
        };
        
        btn.setOnClickListener(oclBtn);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
}
Вот что пишет в логе:

11-29 10:23:30.523: W/dalvikvm(333): threadid=9: thread exiting with uncaught exception (group=0x40015560)
11-29 10:23:30.533: E/AndroidRuntime(333): FATAL EXCEPTION: Thread-10
11-29 10:23:30.533: E/AndroidRuntime(333): java.lang.IllegalStateException: Target host must not be null, or set in parameters.
11-29 10:23:30.533: E/AndroidRuntime(333): at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:572)
11-29 10:23:30.533: E/AndroidRuntime(333): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292)
11-29 10:23:30.533: E/AndroidRuntime(333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-29 10:23:30.533: E/AndroidRuntime(333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-29 10:23:30.533: E/AndroidRuntime(333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
11-29 10:23:30.533: E/AndroidRuntime(333): at com.example.reseptionsms.MainActivity$1$1.run(MainActivity.java:62)
11-29 10:23:30.533: E/AndroidRuntime(333): at java.lang.Thread.run(Thread.java:1019)



В php я ничего не менял у себя или сервер в любом случае должен дать какой либо ответ?
0
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
29.11.2013, 15:19 #5
http://dajver.blogspot.com/2013/02/json.html как туториал, там и посылание запроса в отдельном потоке, и сервер на пхп
0
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
29.11.2013, 18:06 #6
mizha, ошибка здесь:
Java
1
HttpPost httppost = new HttpPost("127.0.0.1/all/index.php"); // упустили http://
1
mizha
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
29.11.2013, 18:21  [ТС] #7
Wenceslaus, дописал "http://" результат остался не изменным.

dajver, попробовал как написано в примере, сделал у себя такой же php файл, но результат не получил используя адрес http://127.0.0.1/all/index.php, а при использовании адреса который указан в примере ответ приходит.

Возможно какая-то проблема в самом локальном сервере?
0
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
29.11.2013, 18:23 #8
Цитата Сообщение от mizha Посмотреть сообщение
dajver, попробовал как написано в примере, сделал у себя такой же php файл, но результат не получил используя адрес http://127.0.0.1/all/index.php, а при использовании адреса который указан в примере ответ приходит.

Возможно какая-то проблема в самом локальном сервере?
Скорей всего у вас этот адрес не открыт для интернета, поройтесь в настройках денвера или вампа, что у вас там стоит, и посмотрите есть ли доступ в интернет у вашего ресурса.
0
mizha
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
29.11.2013, 18:28  [ТС] #9
Извините, забыл указать - я использую xampp. Мои скрипты могут иметь доступ в интернет и загружать необходимые ресурсы, а вот их в доступ дать не могу. Мои ресурсы могут смотреть только те, кто подключен в мою wi-fi сеть.
0
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
29.11.2013, 18:34 #10
Цитата Сообщение от mizha Посмотреть сообщение
Извините, забыл указать - я использую xampp. Мои скрипты могут иметь доступ в интернет и загружать необходимые ресурсы, а вот их в доступ дать не могу. Мои ресурсы могут смотреть только те, кто подключен в мою wi-fi сеть.
Ну дело в доступе к данным, а не в работе приложения, если приложение работает на других сайтах значит и на вашем должно работать, проблема в сервере. Создайте на бесплатном хостинге сервер, и попробуйте через него поработать, если не получается с собственным.
1
mizha
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
30.11.2013, 01:11  [ТС] #11
Всё верно. Оба скрипта рабочие, дело было в сервере. Что помогли и направили в нужную сторону.

Добавлено через 5 часов 42 минуты
Возник новый вопрос для продолжения этой темы. У меня есть 2 класса(MainActivity и SmsReceiver). В классе MainActivity у меня есть метод который загружает данные из Preferences(метод работает), но вопрос собственно вот в чем: не знаю как вызвать этот метод в классе SmsReceiver.
Пробовал создать объект и через него вызвать метод, но приложение вырубается.

Как можно его вызвать?
0
mizha
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
02.12.2013, 11:29  [ТС] #12
Вопрос актуалне
0
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
02.12.2013, 15:20 #13
Цитата Сообщение от mizha Посмотреть сообщение
Всё верно. Оба скрипта рабочие, дело было в сервере. Что помогли и направили в нужную сторону.

Добавлено через 5 часов 42 минуты
Возник новый вопрос для продолжения этой темы. У меня есть 2 класса(MainActivity и SmsReceiver). В классе MainActivity у меня есть метод который загружает данные из Preferences(метод работает), но вопрос собственно вот в чем: не знаю как вызвать этот метод в классе SmsReceiver.
Пробовал создать объект и через него вызвать метод, но приложение вырубается.

Как можно его вызвать?
Можно код класса и как вы вызываете?
0
mizha
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
02.12.2013, 23:53  [ТС] #14
Java
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
public class MainActivity extends Activity {
 
    
    Button btnSettings;
    EditText edText;
    SharedPreferences sPref;
    final String SAVED_TEXT = "saved_text";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btnSettings = (Button)findViewById(R.id.button1);
        edText = (EditText)findViewById(R.id.txtSettings);      
        
        LoadSettings();
        
        OnClickListener oclBtn = new OnClickListener(){
            public void onClick(View v){
                SaveSettings();
        }};
        
        btnSettings.setOnClickListener(oclBtn);
    }
    
    void SaveSettings(){
        sPref = getPreferences(MODE_PRIVATE);
        Editor ed = sPref.edit();
        ed.putString(SAVED_TEXT,edText.getText().toString());
        ed.commit();
        Toast.makeText(getApplicationContext(), "Info is save", Toast.LENGTH_SHORT).show();
    }
    
    public String LoadSettings(){
        sPref = getPreferences(MODE_PRIVATE);
        String savedSettings = sPref.getString(SAVED_TEXT,"");
        edText.setText(savedSettings);
        
        return savedSettings;
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
}
Вызвать пробовал так:

Java
1
2
3
MainActivity mn_obj = new MainActivity();
mn_obj.LoadSettings();
Toast.makeText(ctx, mm.LoadSettings(), Toast.LENGTH_SHORT).show();
0
dajver
409 / 273 / 18
Регистрация: 18.09.2010
Сообщений: 1,112
03.12.2013, 00:37 #15
Попробуйте доставать вот так

Java
1
2
String TEXT= sPref.getString("saved_text", "");
Toast.makeText(ctx,TEXT, Toast.LENGTH_SHORT).show();
0
03.12.2013, 00:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 00:37
Привет! Вот еще темы с ответами:

Отправка post запросов на сервер - Программирование Android
доброго, имеется программа на пк и хочу сделать аналог для андроида, но в андроиде я не силен, в общем нужно три формы логин, веббровсер и...

Отправка get запроса - Программирование Android
Здравствуйте. Уже который день бьюсь с отправкой get запроса и получения ответа. Делаю примерно так: switch (v.getId()) { ...

Отправка файла и данных POST запросом AsyncTask - Программирование Android
Доброго, Возникла идея для написания программы которая бы отправляла файл на PHP сервер методом POST при помощи AsyncTask, как можно...

Отправка данных на сервер методом POST c AsyncTask - Программирование Android
Доброго времени суток. Возникла проблема с отправкой данных. Приложение запускается, не вылетает, но на сервер ничего не отправляет. Уже...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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