Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/79: Рейтинг темы: голосов - 79, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
1

Отправка POST запроса

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

Author24 — интернет-сервис помощи студентам
Здравствуйте! Решил попробовать написать приложение на 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2013, 01:50
Ответы с готовыми решениями:

Отправка POST запроса
Добрый день! столкнулся с проблемой, не могу отправить пост запрос, сваливаюсь на OutputStream...

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

Не работает отправка POST запроса
try{ HttpClient httpclient = new DefaultHttpClient(); //YOUR PHP SCRIPT...

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

15
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
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
Android Developer
131 / 131 / 6
Регистрация: 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
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(DefaultRequest Director.java:572)
11-29 10:23:30.533: E/AndroidRuntime(333): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirecto r.java:292)
11-29 10:23:30.533: E/AndroidRuntime(333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:5 55)
11-29 10:23:30.533: E/AndroidRuntime(333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:4 87)
11-29 10:23:30.533: E/AndroidRuntime(333): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:4 65)
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
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
29.11.2013, 15:19 5
http://dajver.blogspot.com/2013/02/json.html как туториал, там и посылание запроса в отдельном потоке, и сервер на пхп
0
Android Developer
131 / 131 / 6
Регистрация: 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
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
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
29.11.2013, 18:23 8
Цитата Сообщение от mizha Посмотреть сообщение
dajver, попробовал как написано в примере, сделал у себя такой же php файл, но результат не получил используя адрес http://127.0.0.1/all/index.php, а при использовании адреса который указан в примере ответ приходит.

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

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

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

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

Как можно его вызвать?
Можно код класса и как вы вызываете?
0
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
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
03.12.2013, 00:37 15
Попробуйте доставать вот так

Java
1
2
String TEXT= sPref.getString("saved_text", "");
Toast.makeText(ctx,TEXT, Toast.LENGTH_SHORT).show();
0
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
03.12.2013, 02:15  [ТС] 16
функция сама по себе рабочая. Я проверял её в пределах класса MainActivity и она показывала результат, а мне я её пробую вызвать в другом классе. У меня 2 класса - MainActivity и SmsReceiver. Ниже я приведу код класса SmsReceiver:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class SmsReceiver extends BroadcastReceiver {
    
    MainActivity mm;
    @Override
    public void onReceive(Context ctx, Intent intent) 
    {
                 /*.......*/
                 mm = new MainActivity();
               new Thread(new Runnable() {
             
                @Override
                public void run() {
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://mysite.com/index.php");
Вместо "http://mysite.com/index.php" я хочу вставить mm.LoadSettings();
Когда я таким образом вызывают функци, то код говорит, что мол не знает такой функции. Хотя в MainActivity она у меня PUBLIC. Вот в этом у меня и возник вопрос. Как вызвать функцию LoadSettings() из класса MainActivity в классе SmsReceiver.
0
03.12.2013, 02:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2013, 02:15
Помогаю со студенческими работами здесь

Отправка POST-запроса на сервер
Задача - отправить на сервер запрос (либо параметры для запроса на сервере) и получить выборку....

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

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

Отправка post запросов на сервер
доброго, имеется программа на пк и хочу сделать аналог для андроида, но в андроиде я не силен, в...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru