Сохранение XML-канала из InputStream в локальный файл в Android?

#java #android #inputstream #fileoutputstream #local-files

#java #Android #inputstream #fileoutputstream #локальные файлы

Вопрос:

Я читаю XML-канал с веб-сайта, но по соображениям производительности я хотел бы иметь возможность считывать его в локальный файл на Android, чтобы я мог обрабатывать его несколько раз без задержек и затрат в сети.

Я читаю веб-файл, используя следующий код:

     private InputStream downloadUrl(String urlString) throws IOException {
    URL url = new URL(urlString);
    try {
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        // Starts the query
        conn.connect();
        InputStream instream = conn.getInputStream();
        return instream;
    } catch (Exception e) {
        Log.i("downloadUrl", "4 - Exception: "   e.getMessage());
        return null;
    }
}
  

Тем не менее, я получаю сообщение «4 — Exception: null» от downloadUrl (), которое портит мой код сохранения файла ниже:

     public Boolean copyStream(String feed, String file) {
    InputStream input_data = null;
    FileOutputStream output_data = null;

    int bufferSize = 1024;
    byte[] buffer = new byte[bufferSize];
    int len = 0;

    int buffer_count = 0;

    try {
        input_data = downloadUrl(feed);
        output_data = openFileOutput(file, Context.MODE_PRIVATE);
        while ((len = input_data.read(buffer)) != -1) {
            output_data.write(buffer, 0, len);
            buffer_count  ;
        }
        input_data.close();
        output_data.close();
    } catch (Exception e) {
        Log.e("copyStream", "Error="   e.getMessage()   ", feed="   feed
                  ", file="   file   ", buffer_count="   buffer_count);
        return false;
    }
    return true;
}
  

Если я смогу решить проблему с InputStream, будет ли CopyStream () отправлять текст XML в локальный файл без ошибок разрешения?

Заранее спасибо………… Фил


greenapps,

Это logcat, но он говорит немного больше, чем я уже предоставил (замените 192.168.1.213 на 83.104.132.69 для внешнего URL):

 06-19 08:05:04.414: I/downloadUrl(1108): 4 - Exception: null
06-19 08:05:04.414: E/copyStream(1108): Error=/summary.xml: open failed: EROFS (Read-only file system), feed=http://192.168.1.213/cgi-bin/beerxml_a.cgi?beer_display=Summaryamp;beer_country=*All*amp;beer_brewer=*All*amp;beer_type=*All*, file=summary.xml
  

Комментарии:

1. Пожалуйста, опубликуйте stacktrace / logcat. Разрешения не требуются для частной внутренней памяти.