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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.76
fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
#1

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

06.07.2013, 20:36. Просмотров 4680. Ответов 6
Метки нет (Все метки)

Суть задачи: при нажатии на кнопку пост-запросом отправляется переменная со значением.

Проблема: при нажатии на кнопку приложение экстренно останавливается.

С принимающим скриптом на сервере все в порядке.

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
package my.home.page;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity {
 
Button btnOk;
/**Вызывается при первом создании */
@Override
 public void onCreate(Bundle savedInstanceState)
 { super.onCreate(savedInstanceState);
 // загрузка layout
 setContentView(R.layout.main);
 btnOk = (Button) findViewById(R.id.button1);
 
 OnClickListener oclBtnOk = new OnClickListener() {
     @Override
     public void onClick(View v) {
       
        send();
     }
   };
   btnOk.setOnClickListener(oclBtnOk);
 }
public void send()
{
    // Создадим HttpClient и PostHandler
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://www.site.ru/index.php");
 
        try {
            // Добавим данные (пара - "название - значение")
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("json_mobile", "android"));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            // Выполним запрос
            HttpResponse response = httpclient.execute(httppost);
            
        } catch (ClientProtocolException e) {
            // Ошибка :(
        } catch (IOException e) {
            // Ошибка :(
        }
}
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2013, 20:36     POST - запрос на сервер
Посмотрите здесь:
Android Реализовать простой post запрос на php сервер
Отправка post запросов на сервер Android
Android post запрос
POST запрос Android
Android Post запрос
Android POST Запрос
Post запрос Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.07.2013, 20:53     POST - запрос на сервер #2
Цитата Сообщение от fruktik Посмотреть сообщение
при нажатии на кнопку приложение экстренно останавливается
ну, очевидно, это потому что происходит екзепшен...
fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
06.07.2013, 20:56  [ТС]     POST - запрос на сервер #3
V0v1k, ну это я понимаю...
если убрать вызов функции send(); из события onclick все хорошо нажимается

Проблема в этой функции, но я не понимаю где.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.07.2013, 21:11     POST - запрос на сервер #4
а в логи смотреть пробовали?
fruktik
32 / 32 / 3
Регистрация: 03.03.2011
Сообщений: 302
06.07.2013, 21:27  [ТС]     POST - запрос на сервер #5
V0v1k, пробовал:
android.os.NetworkOnMainThreadException
по этому запросу, нашел информацию на stackoverflow:
This exception is thrown when an application attempts to perform a networking operation on its main thread. Run your code in AsyncTask: http://stackoverflow.com/questions/6...hreadexception

Сделал как было сказано:
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
package my.home.page;
 
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
 
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends Activity {
 
Button btnOk;
/**Вызывается при первом создании */
@Override
 public void onCreate(Bundle savedInstanceState)
 { super.onCreate(savedInstanceState);
 // загрузка layout
 setContentView(R.layout.main);
 btnOk = (Button) findViewById(R.id.button1);
 
 OnClickListener oclBtnOk = new OnClickListener() {
     @Override
     public void onClick(View v) {
       
         class RequestTask extends AsyncTask<String, String, String> {
 
             @Override
             protected String doInBackground(String... params) {
 
                     try {
                             //создаем запрос на сервер
                             DefaultHttpClient hc = new DefaultHttpClient();
                             ResponseHandler<String> res = new BasicResponseHandler();
                             //он у нас будет посылать post запрос
                             HttpPost postMethod = new HttpPost(params[0]);
                             List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
                             nameValuePairs.add(new BasicNameValuePair("json_mobile", "12345"));
                             //собераем их вместе и посылаем на сервер
                             postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                            
                     } catch (Exception e) {
                             System.out.println("Exp=" + e);
                     }
                     return null;
             }    
     }
     }
   };
   btnOk.setOnClickListener(oclBtnOk);
 }
 
}
При нажатии не вылетает, но и ничего не посылает
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.07.2013, 21:46     POST - запрос на сервер #6
и где же вы запускаете AsyncTask?

Добавлено через 49 секунд
где запрос отправляете?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2013, 19:34     POST - запрос на сервер
Еще ссылки по теме:
Android Отправка данных на сервер методом POST c AsyncTask
Android Post запрос XML
Android Не передается POST запрос
Retrofit 2 post запрос Android
Android Потоки и post запрос

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

Или воспользуйтесь поиском по форуму:
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
07.07.2013, 19:34     POST - запрос на сервер #7
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
        @Override
        protected Void doInBackground(Void... params) {
            try {
                /*URL url = new URL(source);
                InputStream is = url.openStream();
                ans = convertStreamToString(is);is.close();    */
                HttpParams param = new BasicHttpParams();
                param.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
                DefaultHttpClient mHttpClient = new DefaultHttpClient(param);
                final HttpPost request = new HttpPost("http://www.connections.ixrad.ru/registration.php");
                final MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.STRICT);
                reqEntity.addPart("login", new StringBody("login1"));                      
                request.setEntity(reqEntity);
                final HttpResponse response = mHttpClient.execute(request);  
                HttpEntity httpEntity = response.getEntity();
                InputStream is = httpEntity.getContent();
                Log.d("ans", convertStreamToString(is));
                is.close();
 
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                error = true;
            } catch (IOException t) {
                t.printStackTrace();
                error = true;
            }
            return null;
            
        }
Все работает
Yandex
Объявления
07.07.2013, 19:34     POST - запрос на сервер
Ответ Создать тему
Опции темы

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