Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
#1

Как подключить библиотеки для работы с файлами? - Программирование Android

14.12.2015, 15:14. Просмотров 457. Ответов 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.java:304)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:242)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(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.BasicHeaderValueFormatter' 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.toString(ContentType.java:153)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.entity.mime.MultipartFormEntity.<init>(MultipartFormEntity.java:53)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.java:236)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.entity.mime.MultipartEntity.getEntity(MultipartEntity.java:119)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.entity.mime.MultipartEntity.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.BasicHttpProcessor.process(BasicHttpProcessor.java:295)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:165)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:413)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
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.java:292)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-14 15:11:18.647 17774-17828/com.example.g E/AndroidRuntime: at android.os.AsyncTask$SerialExecutor$1.run(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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2015, 15:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как подключить библиотеки для работы с файлами? (Программирование Android):

Где можно найти хороший материал для работы с PDF-файлами - Программирование Android
где можно найти хороший материал для работы с PDF-файлами??? где будут описаны такие действия как просмотр, изменение , удаление ,...

Путеводитель для университета, 2gis отдыхает. Есть схемы, как подключить обьекты? - Программирование Android
Доброго времени суток! Совсем недавно начал изучать Android программирование, столкнулся с такой проблемой. 1) Сущесвует картинка...

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

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

Какую библиотеку подключить для работы с файлами - C (СИ)
Доброго Времени суток, объясните мне как работают функции и какую для них подключать библиотеку. FILE *file; file = fopen(&quot;1.txt&quot;,...

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

11
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,063
Завершенные тесты: 1
14.12.2015, 15:21 #2
https://www.google.com.ua/search?q=C...N4qeywP2ib2IDw
0
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
24.12.2015, 16:27  [ТС] #3
изменил версию библиотеки и все заработало.
Но на другом компе, все равно не пашет.
Пишет что не может найти useLibrary 'org.apache.http.legacy', хотя она прописана и библиотека есть.
Читал на eng форумах, что возможно поможет переустановка sdk. Но WFT !? андройд такой андройд, что для пользователей, что для разработчиков
0
DarkVortex
103 / 69 / 18
Регистрация: 07.07.2014
Сообщений: 240
25.12.2015, 09:13 #4
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
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
25.12.2015, 09:29  [ТС] #5
DarkVortex, есть и не плохой. Так что есть с чем сравнивать.
Да и кто уж про бред говорит:
Java
1
int maxBufferSize = 1 * 1024 * 1024;
Вы предложили не решение проблемы, а переписывать код именно для загрузки файла. Помимо этого мне необходимо и передавать post данные. Я за универсальность, а не вбивать ручками заголовки для каждого передаваемого параметра. Мой вариант хоть и устаревший, но более гибкий. Понятно что можно все сделать и на более современном раскладе, но повторюсь создавать самому заголовки и собирать параметры в строку через цикл как в большинстве мануалов скудновато - на это времени нет , по возможности конечно сделаю.
0
DarkVortex
103 / 69 / 18
Регистрация: 07.07.2014
Сообщений: 240
25.12.2015, 09:41 #6
gradus, Суть в том, что я потратил на это не больше 15 минут. И оно прекрасно работает на всех версиях android и на всех устройствах, когда мне нужно выгрузить файл на сервер я просто беру эту функцию. А сколько времени/нервов потратили вы?
0
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
25.12.2015, 09:54  [ТС] #7
DarkVortex, вы потратили 15 минут для копипаста кода на форум.
Мне же необходимо будет переписать это код полностью, захватив только ключевые вызовы.
Поднимать мануалы по заголовкам, далее протестировать, исправить ошибки если будут и обновить приложение.
Это уж никак не 15 минут, с учетом что есть более срочные и приоритетные задачи. Но на личном компе не могу запустить приложение из-за этой ошибки, в этом есть даже плюс Но интерес в решение проблемы все же не отпадает, даже если переписать код.
0
DarkVortex
103 / 69 / 18
Регистрация: 07.07.2014
Сообщений: 240
25.12.2015, 10:07 #8
gradus, на копипаст я потратил минуты 2) Просто в следующий раз, чтобы не переписывать полностью, изучите возможные решения, найдите самое простое, скопипастьте его и адаптируйте под свои нужды, как раз в 15 минут уложитесь.

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

Ну и как вам решение с помощью метода getQuery в присланном вами примере ?) по моему у меня это проще выглядит
0
DarkVortex
103 / 69 / 18
Регистрация: 07.07.2014
Сообщений: 240
25.12.2015, 10:18 #10
gradus, теперь вы знаете, что лучше не подключать сторонних библиотек)
0
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
25.12.2015, 10:20  [ТС] #11
DarkVortex, нативщина знаете ли тоже не айс, не люблю изобретать велосипеды
0
gradus
0 / 0 / 0
Регистрация: 30.10.2015
Сообщений: 41
28.12.2015, 09:57  [ТС] #12
DefaultHttpClient - случаем не использование api браузера по умолчанию ?
В редких случаях проскакивает два запроса, причем у меня подозрение что первый в приложении не обрабатывается, а кем то сначала перехватывается и потом дает разрешение приложению повторить этот запрос.
Это может быть антивирус или режим браузера, аля "уменьшение трафика", где пытается кешировать сначала сам запрос в фоне.
Или может телефон переключается в другой режим работы с сетью (wi-fi, 4g,3g) и шлет запрос повторно ?
0
28.12.2015, 09:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2015, 09:57
Привет! Вот еще темы с ответами:

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

Откуда и как добавить библиотеки, нужные для работы с MYSQL - C#
Здравствуйте, что - то я не могу понять, откуда и как добавить библиотеки нужные для работы с MYSQL

Как переделать прогу для работы с файлами - C++
Всем привет) Есть вот такая программа. Она выводит на консоль сообщение - находится ли точка на прямой или нет. Координаты точки -...

Как 4 монитора на 1 видео карту подключить для офисной работы? - Видеокарты
Всем здрасте . Цель : взять 4 самых обычных ЖК монитора и подключить к 1 видеокарте с поддержкой 4 мониторов . Возможно ли это...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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