Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/43: Рейтинг темы: голосов - 43, средняя оценка - 4.74
mizha
0 / 0 / 0
Регистрация: 11.04.2013
Сообщений: 114
#1

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

29.11.2013, 01:50. Просмотров 7949. Ответов 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 запроса
Здраствуйте, нужно на сайт отправить пост запрос з логином і паролем, потом...

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

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

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

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

15
Gabberr
103 / 103 / 19
Регистрация: 13.10.2009
Сообщений: 404
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 / 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
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
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
29.11.2013, 15:19 #5
http://dajver.blogspot.com/2013/02/json.html как туториал, там и посылание запроса в отдельном потоке, и сервер на пхп
0
Wenceslaus
Android Developer
130 / 130 / 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
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
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
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
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
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
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
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
410 / 274 / 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
mizha
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 02:15

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

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

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


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

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

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