Проблема записи на приложение для Android - PullRequest
1 голос
/ 13 августа 2010

Ниже приведен код для записи в файл после загрузки изображения из Интернета.Но так или иначе, он просто застрял при записи в File Stream.Никаких исключений.Он просто остается включенным во время цикла, а затем отображает всплывающее окно принудительного закрытия.это происходит 2 или 3 из 10.

private void saveImage(String fullPath) {
  File imgFile = new File(fullPath);
  try {
    if(imgFile.exists()) imgFile.delete();

    URL url = new URL(this.fileURL);
    URLConnection connection = url.openConnection();
    HttpURLConnection httpConnection = (HttpURLConnection)connection;
    InputStream in = httpConnection.getInputStream();

    FileOutputStream fos = new FileOutputStream(imgFile);
    int n = 0;
    while((n = in.read()) != -1) {
        fos.write(n);
    }
    fos.flush();
    fos.close();
    in.close();

  }
  catch(IOException e) {
    imgFile.delete();
    Log.d("IOException Thrown", e.toString());
  }
}

Когда я проверяю записанный файл, он всегда зависает, когда записывает до 4576 байт.(Оригинальный размер изображения превышает 150 КБ) Кто-нибудь может мне помочь в этом вопросе?

Ответы [ 2 ]

2 голосов
/ 14 августа 2010

Здравствуйте, Джуниано, отвечая на ваш второй вопрос, да, вы можете использовать цикл while, но вам нужно еще 2 вещи.

  URL url = new URL(this.fileURL);
  URLConnection connection = url.openConnection();
  HttpURLConnection httpConnection = (HttpURLConnection)connection;

  InputStream in = httpConnection.getInputStream();

   BufferedInputStream myBis = new BufferedInputStream(in);

1) создать ByteArrayBuffer для хранения вашего InputStream

     ByteArrayBuffer myBABuffer = new ByteArrayBuffer(50);
                              int current = 0;
                              while ((current = myBis.read()) != -1) {
                                      myBABuffer.append((byte) current);
                              }    

    FileOutputStream fos = new FileOutputStream(imgFile);

2) создать изображение с сохраненными байтами.

fos.write(myBABuffer.toByteArray());    
fos.flush();
fos.close();
in.close();

Jorgesys

1 голос
/ 13 августа 2010
private void saveImage(String fullPath) {
  File imgFile = new File(fullPath);
  try {
    if(imgFile.exists()) imgFile.delete();

/**    URL url = new URL(this.fileURL);
    URLConnection connection = url.openConnection();
    HttpURLConnection httpConnection = (HttpURLConnection)connection;
    InputStream in = httpConnection.getInputStream();

    FileOutputStream fos = new FileOutputStream(imgFile);
    int n = 0;
    while((n = in.read()) != -1) {
        fos.write(n);
    }
    fos.flush();
    fos.close();
    in.close();***/

 FileOutputStream fos = new FileOutputStream(imgFile);

URL url = new URL(this.fileUR);
Object content = url.getContent();
InputStream in =  (InputStream) content;
Bitmap bitmap = BitmapFactory.decodeStream(in);
bitmap.compress(CompressFormat.JPEG,80, fos);
fos.flush();
fos.close();
in.close();


  }
  catch(IOException e) {
    imgFile.delete();
    Log.d("IOException Thrown", e.toString());
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...