powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Приложение keeps stopping при POST запросе
4 сообщений из 4, страница 1 из 1
Приложение keeps stopping при POST запросе
    #39619863
Николай II
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: заставить Андроид-приложение сделать пост запрос на мой сайт.
Это моё первое приложение на 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
Приложение keeps stopping при POST запросе
    #39619865
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай IIЧего тут не хватает?
во-первых научится смотреть в лог. Скорее всего там где-то есть NetworkOnMainThreadException - сие означает, что нельзя ломиться в сеть в основном потоке приложения. Домашнее задание - нагуглить, как с этим бороться.
...
Рейтинг: 0 / 0
Приложение keeps stopping при POST запросе
    #39619868
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Приложение keeps stopping при POST запросе
    #39619892
Николай II
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Приложение keeps stopping при POST запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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