我正在做壁紙應用。我已經寫了一個AsyncTask來從選定的URL下載照片並將其加載爲牆紙(全部在後臺)。現在,有時AsyncTask函數。而且,我自己無法理解無法從URL加載/下載圖像(以位圖的形式)的原因。 url(好的和壞的)都在瀏覽器上運行並加載正確的圖像。無法從Android載入URL中的照片
我的AsyncTask類:
@Override
protected Void doInBackground(String... params) {
Bitmap output = null;
try {
URL url = new URL(params[0]);
Log.d(TAG, "_log: output URL is: "+url.toString());
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
output = BitmapFactory.decodeStream(inputStream);
Log.d(TAG, "_log: output size "+output.getByteCount());
} catch (MalformedURLException e) {
e.printStackTrace();
Log.d(TAG, "_log: output with MalformedURLException "+e.toString());
} catch (IOException e) {
Log.d(TAG, "_log: output with IOException "+e.toString());
e.printStackTrace();
} catch (Exception e) {
Log.d(TAG, "_log: output with Exception "+e.toString());
e.printStackTrace();
} finally {
if (output != null) util.setupWallpaper(context, output);
else Log.d(TAG, "_log: output is null");
}
return null;
}
和setupWallpaper功能是:
public void setupWallpaper(Context context, Bitmap image) {
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
try {
if (image == null) {
makeToast(context, "Image is null!");
} else {
wallpaperManager.setBitmap(image);
}
} catch (IOException e) {
e.printStackTrace();
}
}
和錯誤是剛剛捕獲異常,而我試圖得到一個空物體大小的堆棧跟蹤,輸出。
output with Exception java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getByteCount()' on a null object reference
RetrieveFeed.doInBackground(RetrieveFeed.java:57)
RetrieveFeed.doInBackground(RetrieveFeed.java:27)
- 好網址: https://images.unsplash.com/photo-1487239954692-e6a970698056?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&s=a98f159f3fb718fe2f5a24703ee75930
- 壞網址: https://images.unsplash.com/photo-1487221967119-451b79e10235?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&s=bd41a3caa8886f9b150915f7cfa002e8
權限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
我不是這個圖像加載到任何的ImageView ,我將這張圖片發送到牆上PaperManager加載爲牆紙。
我想指出的是,我用Glide試過同樣的事情,並且出現了相同的結果!
一點的話 - 你並不需要設置setDoInput(真)爲你加載這些URL獨立或順序此值默認爲 – j2ko
真。你嘗試改變順序嗎? – j2ko
@ j2ko,謝謝。並沒有特定的順序。好的網址總是加載照片,而糟糕的網址永不加載照片。 –