Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
#1

Функция для загрузки файла на сервер - Android

23.06.2013, 16:11. Просмотров 2683. Ответов 20
Метки нет (Все метки)

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
public void sendMedia(String urlAddr, String filePath) {
            final String serverAddress = urlAddr;
            final File file = new File(filePath);
            
            Runnable r = new Runnable() {
                public void run() {   
                    try {
                        HttpParams params = new BasicHttpParams();
                        params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
                        DefaultHttpClient mHttpClient = new DefaultHttpClient(params);
                        final HttpPost request = new HttpPost(serverAddress);
                        final MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.STRICT);
                        final FileBody fileBody = new FileBody(file);
                        reqEntity.addPart("p", fileBody);                      
                      //  reqEntity.addPart("id", new StringBody("some string data"));
                        request.setEntity(reqEntity);
                        final HttpResponse response = mHttpClient.execute(request); 
                        
    
                    } catch (Exception e) {
                        showDialog("Ошибка");
                    }
                }
            };
            new Thread(r).start();
        }
как вы думаете, работоспособна ли эта функция ?
использую так
Java
1
2
3
4
5
6
7
8
9
10
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
         super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
         if (resultCode == RESULT_OK) {
             Uri selectedImage = imageReturnedIntent.getData();
             final pictureView img = (pictureView)findViewById(R.id.img);
             img.setImageURI(selectedImage);
             
             sendMedia("http:/.../load.php",selectedImage.toString());
         }
     }
Добавлено через 29 секунд
проверить не могу, тк на эмуляторе файл не выбрать..

Добавлено через 19 часов 58 минут
тестирование на реальном устройстве показало что приложение падает..
т.е. что - то тут не так..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2013, 16:11     Функция для загрузки файла на сервер
Посмотрите здесь:

Android Клиент-сервер для android
Ошибка при добавлении файла в очередь загрузки (android.app.DownloadManager) Android
Как выполнить запрос на получения url для загрузки картинки Android
Сервер для приложения Android
Android Сервер для приложения
Android При загрузке файла в AsynkTask в строке уведомлений вывести анимацию иконки загрузки
Android Progressbar при передаче файла на сервер
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
23.06.2013, 17:07     Функция для загрузки файла на сервер #2
а что в логах?
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
24.06.2013, 17:04  [ТС]     Функция для загрузки файла на сервер #3
дак как логи то получить..?
на эмуляторе не проверить, а с телефона логи откуда взять?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.06.2013, 17:42     Функция для загрузки файла на сервер #4
LogCat
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
24.06.2013, 18:11  [ТС]     Функция для загрузки файла на сервер #5
поставил https://play.google.com/store/apps/d...n.logcat&hl=ru ,но разобрать какие логи к чему относятся там очень затруднительно, тк они постоянно обновляются и черт ногу там сломит

мб я как то не верно поток запускаю

или нельзя так Uri в строку конвертировать..?
Java
1
sendMedia("http:/.../load.php",selectedImage.toString());
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.06.2013, 18:22     Функция для загрузки файла на сервер #6
Цитата Сообщение от spydark91 Посмотреть сообщение
но разобрать какие логи к чему относятся там очень затруднительно, тк они постоянно обновляются и черт ногу там сломит
в LogCat есть фильтры по приложениям и не только.

Добавлено через 35 секунд
Цитата Сообщение от spydark91 Посмотреть сообщение
в эклипсе есть встроенный LogCat
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
25.06.2013, 19:53  [ТС]     Функция для загрузки файла на сервер #7
дак причем тут эклипс если я собрал проект в apk файл и закинул его на телефон..
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
25.06.2013, 21:47     Функция для загрузки файла на сервер #8
при том, что в нем есть LogCat.
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
29.06.2013, 01:39  [ТС]     Функция для загрузки файла на сервер #9
дак телефон к компу не подключен
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
29.06.2013, 01:44     Функция для загрузки файла на сервер #10
так подключите
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
30.06.2013, 15:47  [ТС]     Функция для загрузки файла на сервер #11
подключил, запускаю
при выборе картинки в еклипсе вылазит такое окошечко, нажимаю "да", тогда открываются куча окошечек , а приложение на телефоне не вылетакет( но и картинки на сервере нет), нажимаю "нет" на телефоне черный экран, в логкет пусто
Миниатюры
Функция для загрузки файла на сервер  
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
30.06.2013, 15:49  [ТС]     Функция для загрузки файла на сервер #12
запустил очередной раз
на телефоне велетело
в логкет такая картина
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
06-30 15:47:49.489: D/dalvikvm(8350): GC_EXTERNAL_ALLOC freed 167K, 46% free 3204K/5895K, external 1197K/1709K, paused 29ms
06-30 15:47:50.781: D/dalvikvm(8350): GC_FOR_MALLOC freed 100K, 44% free 3466K/6151K, external 24888K/26936K, paused 34ms
06-30 15:47:51.171: W/dalvikvm(8350): threadid=25: thread exiting with uncaught exception (group=0x4001d5a0)
06-30 15:47:51.191: E/AndroidRuntime(8350): FATAL EXCEPTION: Thread-32
06-30 15:47:51.191: E/AndroidRuntime(8350): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-30 15:47:51.191: E/AndroidRuntime(8350):     at android.os.Handler.<init>(Handler.java:121)
06-30 15:47:51.191: E/AndroidRuntime(8350):     at android.app.Dialog.<init>(Dialog.java:122)
06-30 15:47:51.191: E/AndroidRuntime(8350):     at android.app.AlertDialog.<init>(AlertDialog.java:63)
06-30 15:47:51.191: E/AndroidRuntime(8350):     at android.app.AlertDialog.<init>(AlertDialog.java:59)
06-30 15:47:51.191: E/AndroidRuntime(8350):     at android.app.AlertDialog$Builder.create(AlertDialog.java:786)
06-30 15:47:51.191: E/AndroidRuntime(8350):     at com.example.pr.userImgDialog_Activity.showDialog(userImgDialog_Activity.java:232)
06-30 15:47:51.191: E/AndroidRuntime(8350):     at com.example.pr.userImgDialog_Activity.access$1(userImgDialog_Activity.java:223)
06-30 15:47:51.191: E/AndroidRuntime(8350):     at com.example.pr.userImgDialog_Activity$3.run(userImgDialog_Activity.java:216)
06-30 15:47:51.191: E/AndroidRuntime(8350):     at java.lang.Thread.run(Thread.java:1027)
06-30 15:47:51.341: D/WindowManagerImpl(8350): finishRemoveViewLocked, mViews[1]: com.android.internal.policy.impl.PhoneWindow$DecorView@405b1ff0
06-30 15:47:55.605: D/Process(8350): killProcess, pid=8350
06-30 15:47:55.605: D/Process(8350): dalvik.system.VMStack.getThreadStackTrace(Native Method)
06-30 15:47:55.605: D/Process(8350): java.lang.Thread.getStackTrace(Thread.java:745)
06-30 15:47:55.605: D/Process(8350): android.os.Process.killProcess(Process.java:797)
06-30 15:47:55.605: D/Process(8350): com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:108)
06-30 15:47:55.605: D/Process(8350): java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:854)
06-30 15:47:55.605: D/Process(8350): java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:851)
06-30 15:47:55.605: I/Process(8350): Sending signal. PID: 8350 SIG: 9
Добавлено через 1 минуту
походу что-то не так с потоком
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.06.2013, 15:51     Функция для загрузки файла на сервер #13
нельзя вызывать диалог не в UI потоке.
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
30.06.2013, 15:56  [ТС]     Функция для загрузки файла на сервер #14
а, ну да, как всегда я не из ui потока диалог показываю
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
            Runnable r = new Runnable() {
                public void run() {   
                    try {
                        HttpParams params = new BasicHttpParams();
                        params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
                        DefaultHttpClient mHttpClient = new DefaultHttpClient(params);
                        final HttpPost request = new HttpPost(serverAddress);
                        final MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.STRICT);
                        final FileBody fileBody = new FileBody(file);
                        reqEntity.addPart("p", fileBody);                      
                      //  reqEntity.addPart("id", new StringBody("some string data"));
                        request.setEntity(reqEntity);
                        final HttpResponse response = mHttpClient.execute(request); 
                        
    
                    } catch (Exception e) {
                        //showDialog("Ошибка");
                        Log.d("ss", "error");
                    }
                }
            };
            new Thread(r).start();
в логкате
Java
1
2
3
06-30 15:52:57.910: D/dalvikvm(8508): GC_EXTERNAL_ALLOC freed 97K, 45% free 3208K/5831K, external 1197K/2395K, paused 55ms
06-30 15:52:59.562: D/dalvikvm(8508): GC_FOR_MALLOC freed 101K, 44% free 3468K/6087K, external 24888K/26936K, paused 35ms
06-30 15:52:59.912: D/ss(8508): error
Добавлено через 2 минуты
Java
1
2
3
4
5
 catch (Exception e) {
                        //showDialog("Ошибка");
                        Log.d("ssss", e.getMessage());
                        Log.d("ss", "error");
                    }
Java
1
06-30 15:56:01.670: D/ssss(8697): /content:/media/external/images/media/1 (No such file or directory)
Добавлено через 29 секунд
хм, это как

Добавлено через 56 секунд
мб всеже дело в том, что нельзя uri в строку превращать так?
Java
1
2
3
4
5
             Uri selectedImage = imageReturnedIntent.getData();
             final pictureView img = (pictureView)findViewById(R.id.img);
             img.setImageURI(selectedImage);   
             
             sendMedia("http://../load.php",selectedImage.toString());
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.06.2013, 16:01     Функция для загрузки файла на сервер #15
естественно Uri это не путь в файловой системе.
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
30.06.2013, 16:03  [ТС]     Функция для загрузки файла на сервер #16
а как можно его выцарапать оттуда?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.06.2013, 16:03     Функция для загрузки файла на сервер #17
Java
1
2
3
4
5
6
7
public String getRealPathFromURI(Uri contentUri) {
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
04.07.2013, 15:32  [ТС]     Функция для загрузки файла на сервер #18
как из не UI потока вызывать диалоги и тд...?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.07.2013, 21:09     Функция для загрузки файла на сервер #19
только в UI потоке.
чтобы выполнить что-то в UI потоке используйте Handler/AsyncTask/view.post()/activity.runOnUiThread()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 23:33     Функция для загрузки файла на сервер
Еще ссылки по теме:

% загрузки файла Android
Сервер для чата Android
Получение хеша бинарного файла сборки для выполняемого apk-файла Android
Android Клиент-сервер приложение для android
Android Передача файла с FTP в папку загрузки Планшета

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

Или воспользуйтесь поиском по форуму:
spydark91
85 / 85 / 2
Регистрация: 03.03.2011
Сообщений: 1,873
04.07.2013, 23:33  [ТС]     Функция для загрузки файла на сервер #20
а можно по примерчику дял view.post()/activity.runOnUiThread()
Yandex
Объявления
04.07.2013, 23:33     Функция для загрузки файла на сервер
Ответ Создать тему
Опции темы

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