我已經通過服務下載了一些png文件,現在我正在嘗試使用它們。他們進入用戶的SD卡。我已驗證每個文件都在卡上。但是,當我嘗試將它們中的任何一個設置爲ImageView時,我會得到空白區域。下載的png文件不可讀
因此,我通過手動嘗試使用手機的圖片查看器在手機上顯示它們,發現文件完好無損。沒有任何文件會打開。我想知道的是,如果我在下載需要發生的文件以使它們可以看作png文件(或位圖文件)後缺少任何步驟。這裏是我服務的代碼,我用它來下載文件:
public class DownloadPicture extends IntentService {
private int result = Activity.RESULT_CANCELED;
public static final String FILENAME = "filename";
public static final String FILEPATH = "filepath";
public static final String RESULT = "result";
public static final String NOTIFICATION "com.mydomain.myapp.MyBroadcastReceiver";
public DownloadPicture() {
super("DownloadPicture");
}
public DownloadPicture(String name) {
super(name);
}
@Override
protected void onHandleIntent(Intent intent) {
String fileName = intent.getStringExtra(FILENAME);
String urlPath = this.getResources().getString(R.string.imagesURL) + fileName;
System.err.println("starting download of: " + fileName);
System.err.println(urlPath);
File output = new File(Environment.getExternalStorageDirectory(), fileName);
if (output.exists()) {output.delete();}
InputStream stream = null;
FileOutputStream fos = null;
try {
URL url = new URL(urlPath);
stream = url.openConnection().getInputStream();
InputStreamReader reader = new InputStreamReader(stream);
fos = new FileOutputStream(output.getPath());
int next = -1;
while ((next = reader.read()) != -1) {
fos.write(next);
}
//Maybe I need to do something else here????
// Successful finished
result = Activity.RESULT_OK;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
publishResults(output.getName(), output.getAbsolutePath(), result);
}
}
的代碼似乎是正確的。你確定urlPath指向一個PNG文件嗎?你有沒有試過用瀏覽器下載它? –
對於這兩個問題都可以。另外,當我使用手機的文件管理器應用程序直接導航到SD卡時,它的擴展名爲.png。 – Alex
嘗試在您的PC中下載,然後與設備中下載的文件進行比較。可能存在連接問題,並且該文件可能已損壞。我認爲它不會受到影響,但是嘗試讀取輸入流並使用幾個字節的緩衝區(而不是一次一個字節)寫入輸出流,並在關閉輸出流之前嘗試刷新。 –