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

Как подключить библиотеки для работы с файлами?

14.12.2015, 15:14. Показов 1608. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уже создавал тему и успешно подключил библиотеки.
Но как оказалось, что бы отправлять не только post-параметры, а и файлы надо использовать другую библиотеку и методы.
Но не думал, что в сфере android-developer все так запущено....
Ну да ладно, ок.
Переделал
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
public class net extends AsyncTask<String, Void, String>  {
 
    Task CallBack;
    String Url;
 
    public net(Task CallBack){
        this.CallBack = CallBack;
    }
 
    protected void onPreExecute() {
        super.onPreExecute();
 
        this.CallBack.before();
 
        this.Url = this.CallBack.Get_url();
    }
 
    @Override
    protected String doInBackground(String... params) {
 
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost http = new HttpPost(this.Url);
        String response = null ;
 
        Map<String,String> nameValuePairs = this.CallBack.param_get();
        Map<String,File> filesPairs = this.CallBack.files_get();
 
        MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null, Charset.forName("UTF-8"));
 
        try {
 
            for(String key : nameValuePairs.keySet()){
               multipartEntity.addPart(key, new StringBody( nameValuePairs.get(key) ) ) ;
            }
 
            for(String key : filesPairs.keySet()){
                multipartEntity.addPart(key, new FileBody(filesPairs.get(key)) );
            }
 
            http.setEntity(multipartEntity); // new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
            HttpResponse httpResponse = httpclient.execute(http);
            int statusCode = httpResponse.getStatusLine().getStatusCode();
 
            if (statusCode == HttpURLConnection.HTTP_OK ) {
                response = EntityUtils.toString(httpResponse.getEntity(), "UTF_8");
            }else{
                this.CallBack.error("server_failed",  statusCode );
            }
        } catch (UnsupportedEncodingException e) {
            this.CallBack.error("encode",  e.hashCode() + " " + e.getMessage() );
        }catch (Exception e) {
            this.CallBack.error("Exception",  e.hashCode() + " " + e.getMessage() );
        }
 
        return response;
    }
 
    protected void onPostExecute(String res) {
        this.CallBack.success(res);
        this.CallBack.Complete();
    }
}
Ах да, надо же еще в gradle дописать библиотеку httpmime, ладно ок...
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.0'
compile 'org.apache.httpcomponents:httpcore:4.4. 1'
compile 'org.apache.httpcomponents:httpclient:4. 5'
compile 'org.apache.httpcomponents:httpmime:4.5'
compile 'com.google.code.gson:gson:2.4'
}
естественно эта собака начинается ругаться на несовместимость, ЭТИ БИБЛИОТЕКИ ИЗ ОДНОГО КОРНЯ! WTF??!!!
Ок, спокойно... дописываю:
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
}
Вроде все норм, запускаю, крутяк приложение пашет. Отправляю запрос и крэш:
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: Process: com.example.g, PID: 17774
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground()
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at android.os.AsyncTask$3.done(AsyncTask.ja va:304)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.FutureTask.finishCo mpletion(FutureTask.java:355)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.FutureTask.setExcep tion(FutureTask.java:222)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.FutureTask.run(Futu reTask.java:242)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.ru n(AsyncTask.java:231)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:1112)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:587)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: Caused by: java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/message/BasicHeaderValueFormatter; in class Lorg/apache/http/message/BasicHeaderValueFormatter; or its superclasses (declaration of 'org.apache.http.message.BasicHeaderValu eFormatter' appears in /system/framework/ext.jar)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.entity.ContentType.toStr ing(ContentType.java:153)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.entity.mime.MultipartFor mEntity.<init>(MultipartFormEntity.java: 53)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.entity.mime.MultipartEnt ityBuilder.buildEntity(MultipartEntityBu ilder.java:236)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.entity.mime.MultipartEnt ity.getEntity(MultipartEntity.java:119)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.entity.mime.MultipartEnt ity.isChunked(MultipartEntity.java:138)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.protocol.RequestContent. process(RequestContent.java:84)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.protocol.BasicHttpProces sor.process(BasicHttpProcessor.java:295)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.protocol.HttpRequestExec utor.preProcess(HttpRequestExecutor.java :165)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.impl.client.DefaultReque stDirector.execute(DefaultRequestDirecto r.java:413)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.impl.client.AbstractHttp Client.execute(AbstractHttpClient.java:5 60)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.impl.client.AbstractHttp Client.execute(AbstractHttpClient.java:4 92)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.impl.client.AbstractHttp Client.execute(AbstractHttpClient.java:4 70)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at com.example.g.lib.net.doInBackground(net .java:62)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at com.example.g.lib.net.doInBackground(net .java:22)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.ja va:292)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.FutureTask.run(Futu reTask.java:237)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.ru n(AsyncTask.java:231)*
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor. runWorker(ThreadPoolExecutor.java:1112)*
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$ Worker.run(ThreadPoolExecutor.java:587)*
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818)*
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2015, 15:14
Ответы с готовыми решениями:

Как подключить библиотеки для работы с Excel
Здравствуйте, не могу объявить Excel в коде c#, так как нужен дальнейший экспорт данных из датагрид в эксель. Референсы на офис добавил...

Какие библиотеки и как их подключить для работы со звуком
Здравствуйте! Подскажите пожалуйста: 1. Как подключать dll библиотеки к паскалю, и их использовать? 2. Подскажите пожалуйста, мне...

Библиотеки для работы с файлами Word
Всем доброго времени суток. Возникла проблем при создании файла word посредством php. Скажите, существуют ли библиотеки, способные...

11
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
14.12.2015, 15:21
https://www.google.com.ua/sear... ywP2ib2IDw
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
24.12.2015, 16:27  [ТС]
изменил версию библиотеки и все заработало.
Но на другом компе, все равно не пашет.
Пишет что не может найти useLibrary 'org.apache.http.legacy', хотя она прописана и библиотека есть.
Читал на eng форумах, что возможно поможет переустановка sdk. Но WFT !? андройд такой андройд, что для пользователей, что для разработчиков
0
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
25.12.2015, 09:13
gradus, а что вы собственно пытаетесь сделать? Выгрузить файл на сервер? Пожалуйста:
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
72
73
74
75
76
77
78
79
    public boolean UploadFile(String serv_url, String path) {
          String fileName = path;
          int serverResponseCode = 0;
          HttpURLConnection conn = null;
          DataOutputStream dos = null;  
          String lineEnd = "\r\n";
          String twoHyphens = "--";
          String boundary = "*****";
          int bytesRead, bytesAvailable, bufferSize;
          byte[] buffer;
          int maxBufferSize = 1 * 1024 * 1024; 
          File sourceFile = new File(SPatch(path)); 
           
          if (!sourceFile.isFile()) {
               Log.d(TAG, "Source File not exist");
               return false;
          } else {
               try { 
                   FileInputStream fileInputStream = new FileInputStream(sourceFile);
                   URL url = new URL(serv_url);
                    
                   conn = (HttpURLConnection) url.openConnection(); 
                   conn.setDoInput(true);
                   conn.setDoOutput(true);
                   conn.setUseCaches(false);
                   conn.setRequestMethod("POST");
                   conn.setRequestProperty("Connection", "Keep-Alive");
                   conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                   conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                   conn.setRequestProperty("uploaded_file", fileName); 
                    
                   dos = new DataOutputStream(conn.getOutputStream());
          
                   dos.writeBytes(twoHyphens + boundary + lineEnd); 
                   dos.writeBytes("Content-Disposition: form-data; name="uploaded_file";filename=""
                                             + fileName + """ + lineEnd);
                    
                   dos.writeBytes(lineEnd);
          
                   bytesAvailable = fileInputStream.available(); 
          
                   bufferSize = Math.min(bytesAvailable, maxBufferSize);
                   buffer = new byte[bufferSize];
          
                   bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
                      
                   while (bytesRead > 0) {
                        
                     dos.write(buffer, 0, bufferSize);
                     bytesAvailable = fileInputStream.available();
                     bufferSize = Math.min(bytesAvailable, maxBufferSize);
                     bytesRead = fileInputStream.read(buffer, 0, bufferSize);   
                      
                    }
          
                   dos.writeBytes(lineEnd);
                   dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
          
                   serverResponseCode = conn.getResponseCode();
                   String serverResponseMessage = conn.getResponseMessage();
                     
                   Log.i("uploadFile", "HTTP Response is : "
                           + serverResponseMessage + ": " + serverResponseCode);
                    
                   if(serverResponseCode == 200){
                       //все норм
                   }    
                   fileInputStream.close();
                   dos.flush();
                   dos.close();
                     
              } catch (MalformedURLException ex) {
                  Log.e(TAG, "error: " + ex.getMessage(), ex);  
              } catch (Exception e) {
                  Log.e(TAG, "Exception : " + e.getMessage(), e);  
              }
              return true; 
               
           }
serv_url может включать GET параметры если вам нужно.
А вы делаете откровенный бред, и вместо того, чтобы в любом удобном вам поисковике написать что-то вроде "android upload file to server" и получить кучу примеров, вы тут пишите какой плохой android, с таким видом будто у вас в чем-то другом опыт есть.
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
25.12.2015, 09:29  [ТС]
DarkVortex, есть и не плохой. Так что есть с чем сравнивать.
Да и кто уж про бред говорит:
Java
1
int maxBufferSize = 1 * 1024 * 1024;
Вы предложили не решение проблемы, а переписывать код именно для загрузки файла. Помимо этого мне необходимо и передавать post данные. Я за универсальность, а не вбивать ручками заголовки для каждого передаваемого параметра. Мой вариант хоть и устаревший, но более гибкий. Понятно что можно все сделать и на более современном раскладе, но повторюсь создавать самому заголовки и собирать параметры в строку через цикл как в большинстве мануалов скудновато - на это времени нет , по возможности конечно сделаю.
0
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
25.12.2015, 09:41
gradus, Суть в том, что я потратил на это не больше 15 минут. И оно прекрасно работает на всех версиях android и на всех устройствах, когда мне нужно выгрузить файл на сервер я просто беру эту функцию. А сколько времени/нервов потратили вы?
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
25.12.2015, 09:54  [ТС]
DarkVortex, вы потратили 15 минут для копипаста кода на форум.
Мне же необходимо будет переписать это код полностью, захватив только ключевые вызовы.
Поднимать мануалы по заголовкам, далее протестировать, исправить ошибки если будут и обновить приложение.
Это уж никак не 15 минут, с учетом что есть более срочные и приоритетные задачи. Но на личном компе не могу запустить приложение из-за этой ошибки, в этом есть даже плюс Но интерес в решение проблемы все же не отпадает, даже если переписать код.
0
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
25.12.2015, 10:07
gradus, на копипаст я потратил минуты 2) Просто в следующий раз, чтобы не переписывать полностью, изучите возможные решения, найдите самое простое, скопипастьте его и адаптируйте под свои нужды, как раз в 15 минут уложитесь.

Добавлено через 5 минут
Цитата Сообщение от gradus Посмотреть сообщение
Помимо этого мне необходимо и передавать post данные.
Я наверное напугаю вас, но http://stackoverflow.com/quest... using-post
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
25.12.2015, 10:14  [ТС]
DarkVortex, так и было сделано.
Не скажу что я весь день гуглил, но просмотрел первые позиции поисковика и стековервлоф.
Именно, что самое простое и адаптивное/быстрое решение в моем первом посте, но я говорю именно про реализацию кода и его алгоритма. Я же не думал что существует проблемы с элеметарным подключением библиотек, да и где гарантии что под другим методом реализации не возникнет аналогичных проблем, с учетом что я еще в java и android первый раз работаю.

Ну и как вам решение с помощью метода getQuery в присланном вами примере ?) по моему у меня это проще выглядит
0
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
25.12.2015, 10:18
gradus, теперь вы знаете, что лучше не подключать сторонних библиотек)
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
25.12.2015, 10:20  [ТС]
DarkVortex, нативщина знаете ли тоже не айс, не люблю изобретать велосипеды
0
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 45
28.12.2015, 09:57  [ТС]
DefaultHttpClient - случаем не использование api браузера по умолчанию ?
В редких случаях проскакивает два запроса, причем у меня подозрение что первый в приложении не обрабатывается, а кем то сначала перехватывается и потом дает разрешение приложению повторить этот запрос.
Это может быть антивирус или режим браузера, аля "уменьшение трафика", где пытается кешировать сначала сам запрос в фоне.
Или может телефон переключается в другой режим работы с сетью (wi-fi, 4g,3g) и шлет запрос повторно ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2015, 09:57
Помогаю со студенческими работами здесь

Xls и Xlsx библиотеки и компоненты для работы с файлами
Кто может посоветовать библиотеку или компоненты для работы с файлами (Xls и Xlsx). Желательно чтобы работать можно было без установки...

Какую библиотеку подключить для работы с файлами
Доброго Времени суток, объясните мне как работают функции и какую для них подключать библиотеку. FILE *file; file =...

Подключить стороннюю библиотеку (в данном случае ffmpeg) для работы с различными аудио файлами
Здравствуйте! В программе необходимо подключить стороннюю библиотеку (в данном случае ffmpeg) для работы с различными аудио файлами, а...

Какие библиотеки нужны для работы с видео avi, flv и для работы с mp3?
Hello world! Подскажите пожалуйста какие библиотеки нужни мне для работи с видео .avi, flv и т.д и для работи .mp3? Союираюс...

Как подключить 2 акустики для их одновременной работы
Нужно к компу подключить 2 комплекта простой компьютерной акустики. У каждой свой мини джек. Проще всего для меня было бы поискать в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru