Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45

Подключаемые библиотеки в Android Studio

31.10.2015, 00:01. Показов 6574. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сразу скажу что я нуб, сегодня первый день когда взялся за java и android studio. Написал пока примитивный класс для отправки post данных на сервер.
И большую часть времени потратил на разбор полетов с android studio, потому как:

1) org.apache.http почему-то не входит в стандартный набор пакетов, как скачать через стандартные тулсы ide я не нашел.
Зашел на сайт апача, скачал библиотеки, закинул в папку проекта \app\libs (httpclient-4.5.1, httpcore-4.4.3) и в android studio правой кнопкой мыши добавил эти библиотеки ( зачем это кстати если они уже лежат в папке lib ? ).

2) после добавления необходимых библиотек, выпал error:
Error:duplicate files during packaging of APK app\build\outputs\apk\app-debug-unaligned.apk
Path in archive: META-INF/DEPENDENCIES
Origin 1: \app\libs\httpclient-4.5.1.jar
Origin 2: \app\libs\httpcore-4.4.3.jar
По совету компилятора добавил в build.gradle
Code
1
2
3
4
5
packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
}
но WTF ? что это еще за история, какая еще дубликация файлов если как я понял у каждой библиотеки есть такие файлы.

3) Теперь ошибок нет, но приложение вылетает и в дебагере ничего нет, елки палки ну как искать тогда ошибки ?
окей, запустил этот метод отправки post не при старте приложения, а при нажатии на кнопку и тут уже дебаг показал:
FATAL EXCEPTION: main
E/AndroidRuntime: java.lang.VerifyError: org/apache/http/conn/ssl/DefaultHostnameVerifier
E/AndroidRuntime: at org.apache.http.impl.client.HttpClientBu ilder.build(HttpClientBuilder.java:944)
E/AndroidRuntime: at ru.project.te.api.send(api.java:38)
E/AndroidRuntime: at ru.project.te.MainActivity$1.onClick(Mai nActivity.java:40)
E/AndroidRuntime: at android.view.View.performClick(View.java :4276)
E/AndroidRuntime: at android.view.View$PerformClick.run(View. java:17757)
E/AndroidRuntime: at android.os.Handler.handleCallback(Handle r.java:730)
E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handl er.java:92)
E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime: at android.app.ActivityThread.main(Activity Thread.java:5223)
E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Na tive Method)
E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.j ava:525)
E/AndroidRuntime: at com.android.internal.os.ZygoteInit$Metho dAndArgsCaller.run(ZygoteInit.java:737)
E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:553)
E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
Да что ты б** опять не работаешь ?!

Что теперь править, что бы элементарный post запрос отработал ?

Код прилагаю:
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
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
 
public class api {
 
    private String url = "http://example.com/api.php";
    private String key = "test";
 
 
 
    public String send( String method_name , List<NameValuePair> params ){
 
        HttpClient client; // web клиента
        HttpPost request; // POST запрос
        HttpResponse response; // объект ответа
        HttpEntity httpEntity; // http объект
        String content = null; // string ответ
        
        try {
 
            // создаем web клиента
            client = HttpClientBuilder.create().build();
 
            // формируем url запроса и создаем POST объект
            request = new HttpPost( this.url + "?key=" + key + "&method=" + method_name );
 
            // заполняем POST объект данными из входящего массива params
            request.setEntity(new UrlEncodedFormEntity(params));
 
            // выполняем запрос
            response = client.execute(request);
 
            // создаем http сущность ответа
            httpEntity = response.getEntity();
 
            // через утилиту EntityUtils конвертируем поток из http объекта ответа в string , с указанием кодировки
            content = EntityUtils.toString(httpEntity, "UTF-8");
 
        } catch (IOException e) {
            // в случае ошибки
            content = e.getMessage();
        }
 
        return content;
    }
 
}
p.s. может есть ide более "лучше" или просто я такой рукожоп ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2015, 00:01
Ответы с готовыми решениями:

(Android studio, java) Ошибка при импорте библиотеки cannot resolve symbol android studio
Вот библиотека https://github.com/mik3y/usb-serial-for-android. Устанавливал так, File -&gt; New -&gt; Import module. Студия ругается на...

Не видны методы стандартной библиотеки Android studio
Пишу android приложение (Android studio).Подключаю стандартную библиотеку: import android.bluetooth.BluetoothDevice; В мануалах к...

Подключаемые библиотеки
Приветствую всех. Друзья возникла у меня некая идея за которой последовало ряд вопросов все вопросы связаны с библиотеками классов просьба...

14
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
31.10.2015, 10:44
С IDE все впорядке. Библиотеки можно подключить в dependencies
compile 'org.apache.httpcomponents:httpcore:4.4. 1'
compile 'org.apache.httpcomponents:httpclient:4. 5'
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
31.10.2015, 14:23  [ТС]
YuraAAA, хм... спасибо, но не помогло.

Удалил библиотеки которые сам закачал и вернул build.gradle в исходное состояние, далее добавил в блок dependencies:
compile 'org.apache.httpcomponents:httpcore:4.4. 1'
compile 'org.apache.httpcomponents:httpclient:4. 5'
android studio что-то там грузил грузил в результате некоторые пакеты загрузились.
А вот эти все равно подсвечивает красным ( типо незнаю я что это ):
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncoded FormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBu ilder;
Это ведь часто используемые библиотеки если вообще не стандартные, что так сложно то все...
Есть ли возможность скачивать библиотеки без ручного поправления этого файла ? выбирать к примеру из готового списка
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
31.10.2015, 15:40
gradus, из мавен репозитория можно. погугли.
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
31.10.2015, 18:49  [ТС]
Mikalai, ок посмотрю.

Но все же хочу уточнить, в приведенном моем примере нельзя просто к примеру: добавить строку в настройки и все заработает ?
Тоооооесть.... вот этим примитивным скриптом я выхожу за рамки возможностей android studio и начинаю искать стороннее ПО что бы тупо подключить стандартные библиотеки ?
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
31.10.2015, 20:54
Цитата Сообщение от gradus Посмотреть сообщение
вот этим примитивным скриптом я выхожу за рамки возможностей android studio
AS это просто удобная IDE. Наверное правильно сказать за рамки Android SDK. Но это всё лирика. Вот тут почитай про Apache HTTP.
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
01.11.2015, 17:06  [ТС]
Mikalai, уже прочитал про это и еще узнал что web запросы не могут применяться в основном потоке.

После установки useLibrary 'org.apache.http.legacy' соответственно пишет о deprecated на классы: HttpClient , HttpPost , HttpResponse , HttpEntity .

Вопрос: как по "модному" надо отправить post запросы ?)
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
01.11.2015, 17:20
gradus, вот. Можно поискать стороннюю библиотеку - лоадер какой-нить. Короче, как душе угодно.
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
02.11.2015, 16:53  [ТС]
В общем ладно, буду использовать DefaultHttpClient.
Раз уж надо делать в отдельном потоке запросы, то хочу сделать некий callback по результату.
Как я хочу сделать: вызываю метод для получения данных и в параметр этого метода передаю ссылку на метод который должен вызваться с полученным результатом.
Собственно вопрос, как сделать callback ?)
Что-то типо того:
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
public class MainActivity extends AppCompatActivity {
 
    public TextView TextLog;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        this.TextLog = (TextView) findViewById(R.id.textView);
 
        Button button = (Button) findViewById(R.id.button);
        
        button.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
                //запускаем наш rest с Async
                rest api = new rest();
                api.execute( {ссылка на объект MainActivity и его метод input_user_name  } );
            }
        });
    }
    
    public void input_user_name(String user_name){
        this.TextLog.setText( user_name );
    }
}
Добавлено через 7 минут
Ну или может есть еще хорошие способы, только не сложные) я только начал изучать
Видел примеры где класс в классе, для меня это как-то не эстетично.
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
02.11.2015, 16:57
Цитата Сообщение от gradus Посмотреть сообщение
Видел примеры где класс в классе, для меня это как-то не эстетично.
Можно внутренний класс вынести в отдельный файл. Правда возможно придется его допиливать, если он использует поля или методы родительского класса.
Цитата Сообщение от gradus Посмотреть сообщение
Ну или может есть еще хорошие способы, только не сложные
Есть
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
02.11.2015, 22:15  [ТС]
Spelcrawler, AsyncTask эт ж вроде абстрактный класс для отдельного потока. А как callback, то в нем сделать ?
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
02.11.2015, 22:37
gradus, тут почитай уроки 80-91.
1
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
03.11.2015, 13:06  [ТС]
В общем не работает и ошибок не пишет

Создал класс запроса:
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
public class net extends AsyncTask<String, Void, String>  {
 
    Task CallBack;
 
    public net(Task CallBack){
        this.CallBack = CallBack;
    }
 
    protected void onPreExecute() {
      this.CallBack.before();
    }
 
    @Override
    protected String doInBackground(String... params) {
        
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost http = new HttpPost("http://127.0.0.1/");
        String response = null ;
 
        List nameValuePairs = this.CallBack.param_get();
 
        try {
            http.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            response = httpclient.execute(http, new BasicResponseHandler());
        } catch (UnsupportedEncodingException e) {
            this.CallBack.error("encode",  e.hashCode() + " " + e.getMessage() );
        }catch (IOException e) {
            this.CallBack.error("IOException",  e.hashCode() + " " + e.getMessage() );
        }
 
        this.CallBack.success(response);
 
        return response;
    }
 
    protected void onPostExecute(String res) {
        this.CallBack.Complete();
    }
}
Создал абстрактный класс:
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
public abstract class Task {
 
    private String result;
    private String errror_code;
    private String error_message;
 
    private List nameValuePairs = new ArrayList();
 
    final public void success(String result){
        this.result = result;
    }
 
    public void before(){}
 
    final public String getResult(){
        return this.result;
    }
 
    abstract void Complete();
 
    final public void error(String Code, String errorMessage){
        this.errror_code = Code;
        this.error_message = errorMessage;
    }
 
    final public void error(Integer Code, String errorMessage){
        this.error( Code.toString() , errorMessage );
    }
 
    final public boolean is_success(){
        return this.errror_code != null;
    }
 
    final public String get_error_message(){
        return this.errror_code + ": " + this.error_message;
    }
 
    final public void param_add(String key, String val){
        this.nameValuePairs.add(new BasicNameValuePair(key, val));
    }
 
    final public List param_get(){
        return this.nameValuePairs;
    }
}
Далее в MainActivity:
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
public class MainActivity extends AppCompatActivity {
 
    public TextView TextLog;
    public EditText loginInput;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        this.TextLog = (TextView) findViewById(R.id.textView);
 
        this.loginInput = (EditText) findViewById(R.id.editText);
 
        Button button = (Button) findViewById(R.id.button);
 
        button.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
 
                String login = loginInput.getText().toString();
                auth authObj = new auth(login);
                new net(authObj);
            }
        });
    }
 
 
    class auth extends Task{
 
        public auth(String login){
            this.param_add("login", login);
        }
 
        public void Complete(){
            TextLog.setText( "Complate" );
        }
 
        public void before(){
            TextLog.setText( "start" );
        }
 
    }
}
Не срабатывают методы в подклассе auth: Complete , before
0
 Аватар для YuraAAA
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
03.11.2015, 13:14
Цитата Сообщение от gradus Посмотреть сообщение
this.CallBack.success(response);
перенести в onPostExecute, иначе краш будет.

Цитата Сообщение от gradus Посмотреть сообщение
new net(authObj);
Java
1
new net(authObj).execute();
1
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
03.11.2015, 13:24  [ТС]
YuraAAA, а блин точно, про execute забыл )
Все круто, все работает. Всем большое спс)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2015, 13:24
Помогаю со студенческими работами здесь

Динамически подключаемые библиотеки
столкнулся с такой проблемой, не получается динамически связаться с библиотекой, вот код unit plub6_3; {$mode objfpc}{$H+} // если...

Подключаемые библиотеки MTurk в NetBeans
Здравствуйте! Недавно решил попробовать использовать Amazon MTurk для реализации своего проекта. Амазон имеют свою SDK для Java, которую...

Компилятор не видит подключаемые библиотеки
Здравствуйте! ОС Ubuntu в папке /Desktop/make/ лежат файлы main.cpp и ctools.h пытаюсь запустить компилятор командой ...

Eclipse не видит подключаемые библиотеки
Пишу простенький кодик для вывода Hello world, но eclipse говорит, мол не знает, что такое iostream. Ну мы то все знаем про эту библиотеку....

Динамически подключаемые библиотеки DLL в WIN32
Написать программу, реализующую DLL модуль для явной компоновки в режимах: • автоматической загрузки DLL; • загрузки DLL с помощью...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru