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

Файл не открывается после загрузки из сети - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Стиль ListView http://www.cyberforum.ru/android-dev/thread1191683.html
Не могу сделать, что бы каждый элемент в ListView был в отдельной рамочке при загрузке приложения. Примерно так: Получается только, когда кликаешь на элемент, он делается в рамочке. <ListView android:id="@+id/lvMain" android:layout_width="fill_parent" android:layout_height="364dp" android:layout_above="@+id/LinearLayout01" android:layout_alignParentRight="true"
Программирование Android TableLayout по центру Есть на активити imageView и TableLayout. imageView в самом верху. Как разместить TableLayout по центу оставшегося пространства? http://www.cyberforum.ru/android-dev/thread1191533.html
HttpClient.execute Программирование Android
Привет всем, при работе этого кода почему то программа вылетает с ошибкой. public String getXmlFromUrl(String url) { String xml = null; try { // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = httpClient.execute(httpPost);
Запись видео TimerTask() Программирование Android
Нужно записывать видео при нажатии на кнопку(видео определенной длительности например 10 мин) и создавалось несколько видео файлов пока не будет нажата кнопка стоп. Запись видео вызываю: public void onClickStartRecord(View view) { int delay = 10; int interval = 5000; Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask(){
Программирование Android Диалоговый ввод даты и времени http://www.cyberforum.ru/android-dev/thread1191104.html
Подскажите как сделать диалог ввода даты, и диалог ввода времени... Оптимально чтоб диалог был всплывающим, а после выбора дата и время они отображались. И подскажите как оптимальней дальше хранить эти данные чтоб можно было с ними работать (сортировать) и т д. Спасибо.
Программирование Android Выполнить tabHost.addTab() после загрузки данных Загружаю данные в потоке и потом из потока, когда всё загрузилось, вызываю handler. Как в этом хендлере выполнить tabHost.addTab ?? Пробую, но не получается, не могу туда вставить инит табов. В MainActivity всё работает, пробую в хендлер - косяк. MainActivity.java Thread myThread = new Thread(new Runnable() { @Override public void run() { подробнее

Показать сообщение отдельно
yol
10 / 10 / 0
Регистрация: 13.10.2012
Сообщений: 155

Файл не открывается после загрузки из сети - Программирование Android

28.05.2014, 23:37. Просмотров 1980. Ответов 5
Метки (Все метки)

Действия в программе такие: сначала загружается файл из сети, затем он открывается для получения содержащихся в нем данных.
В приложении я могу это сделать двумя способами:
1) Скачать файл (событие по нажатию button'а), а затем Открыть файл (также событие по button'у).
2) Скачать файл и затем открыть его (всё это одно событие по button'у).

Первый способ работает стабильно, ни каких проблем нет. Но если я пользуюсь вторым способом - ни чего не получается (ошибка: java.io.FileNotFoundException: /storage/sdcard/Download/tarif.csv: open failed: ENOENT (No such file or directory)).

Дело в том, что мне нужно в приложении использовать второй способ (первый - был создан, чтобы потестить).
Ниже представлены фрагменты кода:
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
//...
public void onClick(View v)
    {
        switch(v.getId())
        {
        
        case (R.id.btnDownloadUtil):
            if (Internet.isConnect(this))
            {
                //загрузка файла-ресурсов.
                String url="www.google.com/file.csv"; //не обращайте внимание на ссылку (она не настоящая).
                String description="Загрузка тарифов";
                String title="Тарифы";
                String fileName="tarif.csv";
                
                Internet.downloadFile(this, url, description, title, fileName);
                
                dbHelper=new DBHelper(this);
                SQLiteDatabase db=dbHelper.getWritableDatabase();
                
                try
                {
                    CSV.parse(this, dbHelper, fileName);
                } catch (IOException e)
                {
                    e.printStackTrace();
                    Toast.makeText(this, "Oops", Toast.LENGTH_LONG).show();
                }
                
                db.close();
            }
        }
        break;
        //...
    }
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 Internet
{
    //проверка статуса интернет-соединения.
    public static boolean isConnect(Context context)
    {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo ni = cm.getActiveNetworkInfo();
          
        if (ni == null) 
            return false;
        else
           return true;
    }
    
    
    //загрузка файла с сервера.
    public static void downloadFile(Context context, String url, String description, String title, String fileName)
    {
        boolean available=false;        
        
        available=DMisAvailable(context);
        
        if (available) //менеджер загрузки доступен.
        {
            DownloadManager.Request request=new DownloadManager.Request(Uri.parse(url));
            request.setDescription(description);
            request.setTitle(title);        
            
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
            //получение сервера загрузки и установка файла в очередь.
            DownloadManager manager=(DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
            manager.enqueue(request);
        }
        else
        {
            Toast.makeText(context, "Менеджер загрузки не доступен!", Toast.LENGTH_SHORT).show();
        }
        
        Log.d("###MSG###", "Файл загружен");
    }
    
    
    //проверка доступности менеджера загрузки.
    public static boolean DMisAvailable(Context context)
    {
        try
        {
            if (Build.VERSION.SDK_INT<Build.VERSION_CODES.GINGERBREAD)
                return false;
                
            Intent intent=new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            intent.setClassName("com.android.providers.downloads.ui", "com.android.providers.downloads.ui.DownloadList");
            List<ResolveInfo> list=context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
            return list.size()>0;
        }
        catch (Exception e)
        {
            return false;
        }
    }   
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void onCreate(SQLiteDatabase db)
    {
        //добавление таблиц в БД.
        db.execSQL("CREATE TABLE "+tableUtil+" ("+
                colIdUtil+" INTEGER PRIMARY KEY, "+
                colUtil+" TEXT)");
        
        //...
        
        
        try
        {
            parse(db);
        } 
        catch (IOException e)
        {
            e.printStackTrace();
            Log.d(TAG, "Ошибка при добавлении данных в БД");
        }
        
    }
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
public void parse(SQLiteDatabase db) throws IOException
    {   
        Log.d("###MSG###", "Парсер начинает работу");
                                                                                                    
        File path=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);       
        String link=path.toString()+"/"+fileName;                                                       
        File file=new File(link);                                                               
            
        InputStream is=new FileInputStream(file);
        
        BufferedReader reader=new BufferedReader(new InputStreamReader(is));
        //извлечение данных из csv-файла построчно.
        try
        {
            String line=reader.readLine();
            int i=0;
            while((line=reader.readLine())!=null)
            {
                i++;
                String[] RowData=line.split("\";\"");   
                addSpecUtil(db, RowData, i);
 
            }
            
        }
        catch (IOException ex)
        {
            Log.d(TAG, "Ошибка чтения данных");
        }
        finally
        {
            is.close();
        }
    }
Ошибка возникает в строке 9: InputStream is=new FileInputStream(file);

Содержимое LogCat'а:
Кликните здесь для просмотра всего текста
05-28 11:39:36.273: W/System.err(2603): java.io.FileNotFoundException: /storage/sdcard/Download/tarif.csv: open failed: ENOENT (No such file or directory)
05-28 11:39:36.283: W/System.err(2603): at libcore.io.IoBridge.open(IoBridge.java:409)
05-28 11:39:36.283: W/System.err(2603): at java.io.FileInputStream.<init>(FileInputStream.java:78)
05-28 11:39:36.283: W/System.err(2603): at com.example.calcutilities.DBHelper.parse(DBHelper.java:179)
05-28 11:39:36.293: W/System.err(2603): at com.example.calcutilities.DBHelper.onCreate(DBHelper.java:114)
05-28 11:39:36.293: W/System.err(2603): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
05-28 11:39:36.293: W/System.err(2603): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
05-28 11:39:36.293: W/System.err(2603): at com.example.calcutilities.MainActivity.onClick(MainActivity.java:91)
05-28 11:39:36.293: W/System.err(2603): at android.view.View.performClick(View.java:4438)
05-28 11:39:36.293: W/System.err(2603): at android.view.View$PerformClick.run(View.java:18422)
05-28 11:39:36.293: W/System.err(2603): at android.os.Handler.handleCallback(Handler.java:733)
05-28 11:39:36.293: W/System.err(2603): at android.os.Handler.dispatchMessage(Handler.java:95)
05-28 11:39:36.293: W/System.err(2603): at android.os.Looper.loop(Looper.java:136)
05-28 11:39:36.293: W/System.err(2603): at android.app.ActivityThread.main(ActivityThread.java:5017)
05-28 11:39:36.293: W/System.err(2603): at java.lang.reflect.Method.invokeNative(Native Method)
05-28 11:39:36.293: W/System.err(2603): at java.lang.reflect.Method.invoke(Method.java:515)
05-28 11:39:36.303: W/System.err(2603): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-28 11:39:36.303: W/System.err(2603): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-28 11:39:36.303: W/System.err(2603): at dalvik.system.NativeStart.main(Native Method)
05-28 11:39:36.303: W/System.err(2603): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
05-28 11:39:36.313: W/System.err(2603): at libcore.io.Posix.open(Native Method)
05-28 11:39:36.313: W/System.err(2603): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
05-28 11:39:36.313: W/System.err(2603): at libcore.io.IoBridge.open(IoBridge.java:393)
05-28 11:39:36.313: W/System.err(2603): ... 17 more


Добавлено через 2 часа 23 минуты
Тему можно закрыть. Удалось найти более изящный вариант загрузки и обработки файла. Приведу фрагмент кода, может быть пригодится кому-нибудь:

Java
1
2
3
4
5
6
7
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 
        
String strUrl="http://www.google.com/file.csv";     
URL url=new URL(strUrl);
BufferedReader reader=new BufferedReader(new InputStreamReader(url.openStream()));
String line=reader.readLine();
Брал отсюда:
Кликните здесь для просмотра всего текста
http://www.cyberforum.ru/android-dev/thread915341.html#post4811390
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru