我正在創建一個用於顯示來自先前指定源的圖像的應用程序。如果版本文件已更改,我將下載這些圖像。如果沒有可用的互聯網連接,它將顯示我以前下載的本地圖像。Android ImageView:從本地文件生成可繪製對象失敗
對於這一點,我使用的是ImageView的和拖拉的對象是這樣的:
String imageName = Startseite.FILENAME_PRE + "1" + Startseite.FILENAME_POST;
Drawable d = Drawable.createFromPath(imageName);
mImageView.setImageDrawable(d);
我三聯通過DDMS檢查發現指定的文件(在這種情況下,「page1.jpeg」)目錄確實存在「數據/數據/ out.path /文件/ image1.jpeg」。但是,在上面的代碼示例中,第二個命令返回一個空對象。該文件可以通過常規方式(流)讀取和寫入,但似乎ImageView不喜歡圖像。
我不知道如何從這裏開始。它可能是因爲我錯過了一個關鍵的安全元素,允許顯示圖像。或者,圖像可能無法顯示。是否有工具來檢查可顯示的圖像?
謝謝你的時間。
編輯1:我已經改變了代碼如下:
String imageName = Startseite.FILENAME_PRE + "1" + Startseite.FILENAME_POST;
String imageNameWithPath = getApplicationContext().getFilesDir().getPath() + '/' + imageName;
Drawable d = Drawable.createFromPath(imageNameWithPath);
這成功地創建了可繪製對象。可悲的是,當通過SetImageDrawable()分配對象時,我的調試器發瘋,並且在我從未聽說過的類(最可能是某些Android內部版本)中讀取4個異常。我檢查了一個雙斜槓(因爲我複製到最後),但路徑看起來很乾淨。
編輯2:可悲的是,當我從流中創建drawable並且沒有事先下載圖像時,會發生同樣的情況。
編輯3:這是應用程序失敗時的LogCat片段。
06-28 08:14:32.323: WARN/dalvikvm(21462): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
06-28 08:14:32.323: ERROR/AndroidRuntime(21462): Uncaught handler: thread main exiting due to uncaught exception
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.ourcompany.apps/de.ourcompany.apps.Startseite}: java.lang.NullPointerException
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at android.os.Handler.dispatchMessage(Handler.java:99)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at android.os.Looper.loop(Looper.java:123)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at android.app.ActivityThread.main(ActivityThread.java:4363)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at java.lang.reflect.Method.invokeNative(Native Method)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at java.lang.reflect.Method.invoke(Method.java:521)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at dalvik.system.NativeStart.main(Native Method)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): Caused by: java.lang.NullPointerException
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at de.ourcompany.apps.Startseite.displayImages(Startseite.java:61)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at de.ourcompany.apps.Startseite.onCreate(Startseite.java:42)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
06-28 08:14:32.343: ERROR/AndroidRuntime(21462): ... 11 more
06-28 08:14:32.373: INFO/Process(64): Sending signal. PID: 21462 SIG: 3
06-28 08:14:32.373: INFO/dalvikvm(21462): threadid=7: reacting to signal 3
06-28 08:14:32.373: ERROR/dalvikvm(21462): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
我試過使用BitmapFactory.decode()方法的版本,不幸的是它也會導致異常。
我可以添加:下面的代碼從一個視頻教程源於:
String mUrlString = "http://www.android.com/images/gingerdroid.png";
try {
mImageView.setImageDrawable(
Drawable.createFromStream(
(InputStream) new URL(mUrlString).getContent(),
"qrcode")
);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
此代碼工作在本教程中,但它具有完全相同的圖像退出,我嘗試做迄今相同的方式。
希望這會有所幫助。
編輯4:問題有點兒自己解決了。我重新創建了這個項目,複製了舊的源代碼,重新創建了虛擬機,然後突然生效。如果是舊項目或虛擬機,我無法確定。
這是我原來的問題的解決方案,因此我將其標記爲解決方案。謝謝。 – 0xCAFEBABE