Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Приложение keeps stopping при POST запросе / 4 сообщений из 4, страница 1 из 1
23.03.2018, 22:49
    #39619863
Николай II
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приложение keeps stopping при POST запросе
Задача: заставить Андроид-приложение сделать пост запрос на мой сайт.
Это моё первое приложение на Java, т.е. уровень владения: "позавчера установил Android Studio 3.0.1". Но есть успешный опыт отправки GET/POST запросов на C++ Builder и javascript.

Что сделал:
0. добавил в файл AndroidManifest.xml строку <uses-permission android:name="android.permission.INTERNET" />
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="su.xn__80abnpf1b.smssender">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
.....



1. добавил в файл build.gradle (Module: app) строку useLibrary 'org.apache.http.legacy'
Код: java
1.
2.
3.
android {
    useLibrary 'org.apache.http.legacy'
....



2. В файле MainActivity.java импортировал классы:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;



3. В файле MainActivity.java, внутри функции onClick кнопки написал:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http://site.su/t.php");
        List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
        nameValuePair.add(new BasicNameValuePair("username", "test_user"));
        nameValuePair.add(new BasicNameValuePair("password", "123456789"));
        //Encoding POST data
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));

        } catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
        try {
            HttpResponse response = httpClient.execute(httpPost);
            String HTML="<p>Ответ: "+response.toString()+"</p>";
        } catch (ClientProtocolException e) {
            // Log exception
            e.printStackTrace();
        } catch (IOException e) {
            // Log exception
            e.printStackTrace();
        }



ПРОБЛЕМА: когда запускаю приложение в эмуляторе и нажимаю кнопку, на строчке HttpResponse response = httpClient.execute(httpPost); пишет Application keeps stopping
Чего тут не хватает?
...
Рейтинг: 0 / 0
23.03.2018, 23:00
    #39619865
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приложение keeps stopping при POST запросе
Николай IIЧего тут не хватает?
во-первых научится смотреть в лог. Скорее всего там где-то есть NetworkOnMainThreadException - сие означает, что нельзя ломиться в сеть в основном потоке приложения. Домашнее задание - нагуглить, как с этим бороться.
...
Рейтинг: 0 / 0
23.03.2018, 23:12
    #39619868
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приложение keeps stopping при POST запросе
...
Рейтинг: 0 / 0
24.03.2018, 02:38
    #39619892
Николай II
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приложение keeps stopping при POST запросе
chpasha , спасибо, сделал отдельный поток и все заработало.
В данном вопросе помогла разобраться эта статья и эта картинка

Мой код получился такой:

Подключаемые классы:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;

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 org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;



сам код запроса:
Код: 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 void DownloadButtonClick (View v)
    {
        DownloadTask Task = new DownloadTask();
        Task.execute();
    }

private class DownloadTask extends AsyncTask<Void, Void, String> {

        private HttpResponse response;
        private String ResponseBody;

        @Override
        protected void onPreExecute() {
            
        }

        @Override
        protected String doInBackground(Void... params) {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://site.su/t.php");
            List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
            nameValuePair.add(new BasicNameValuePair("username", "test_user"));
            nameValuePair.add(new BasicNameValuePair("password", "123456789"));
            //Encoding POST data
            try {
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));

            } catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();
            }
            try {
                response = httpClient.execute(httpPost);
                ResponseBody=EntityUtils.toString(response.getEntity());
            } catch (ClientProtocolException e) {
                // Log exception
                e.printStackTrace();
            } catch (IOException e) {
                // Log exception
                e.printStackTrace();
            }
        return ResponseBody;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result); // в переменной result содержится тело ответа сервера
            
        }
    }
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Приложение keeps stopping при POST запросе / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]