2012-11-06 70 views
0

我目前正試圖檢索一個包的圖標,並將其設置爲一個imageView與此代碼。 ai是一個Drawable。設置可繪製到imageView

final PackageManager pm = getPackageManager(); 

try { 
     ai = pm.getApplicationIcon(packageName); 
    } catch (NameNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    Bitmap bitmap = ((BitmapDrawable)ai).getBitmap(); 

    Log.i("Icons Drawable", ai.toString()); 
    Log.i("Icons Bitmap", bitmap.toString()); 

imageView.setImageBitmap(bitmap); 

logcat的輸出:

11-06 11:10:22.785: I/Icons Drawable(20017): [email protected] 
    11-06 11:10:22.785: I/Icons Bitmap(20017): [email protected] 

11-06 11:10:22.790: E/AndroidRuntime(20017): FATAL EXCEPTION: main 
11-06 11:10:22.790: E/AndroidRuntime(20017): java.lang.RuntimeException: Unable to start activity : java.lang.NullPointerException 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1973) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1999) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.app.ActivityThread.access$600(ActivityThread.java:127) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.os.Looper.loop(Looper.java:137) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.app.ActivityThread.main(ActivityThread.java:4513) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at java.lang.reflect.Method.invokeNative(Native Method) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at java.lang.reflect.Method.invoke(Method.java:511) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:974) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:741) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at dalvik.system.NativeStart.main(Native Method) 
11-06 11:10:22.790: E/AndroidRuntime(20017): Caused by: java.lang.NullPointerException 
11-06 11:10:22.790: E/AndroidRuntime(20017): at com.analyze.project.MalwareAlertDialog.onCreate(MalwareAlertDialog.java:98) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.app.Activity.performCreate(Activity.java:4465) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 
11-06 11:10:22.790: E/AndroidRuntime(20017): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932) 
11-06 11:10:22.790: E/AndroidRuntime(20017): ... 11 more 

即使我嘗試設置可繪製到ImageView的直接不起作用

imageView.setImageDrawable(ai); 
+0

我懷疑'imageView'是'null'。什麼是第98行,以及如何定義'imageView'? – Eric

+0

第98行是'imageView.setImageBitmap(bitmap)'。 'imageView'被定義爲'imageView =(ImageView)findViewById(R.id.imageView1)' – rexer

回答

3

之前定義的ImageView的嘗試這個

PackageManager pm = getPackageManager(); 
ApplicationInfo info=pm.getApplicationInfo(packageName,PackageManager.GET_META_DATA); 
imageView.setImageDrawable(info.loadIcon(pm)); 
0

我建議你使用輸入流 這是一個例子

InputStream floorIs = context.getResources().openRawResource(R.drawable.floor_texture); 

InputStream wallIs =context.getResources().openRawResource(R.drawable.wall_mayu_texture); 

InputStream wallIs2 = context.getResources().openRawResource(R.drawable.wall_buzoo_texture); 

InputStream wallIs3 = context.getResources().openRawResource(R.drawable.wall_niko_texture); 

InputStream wallWindowIs =context.getResources().openRawResource(R.drawable.wall_window_texture); 

InputStream ceilingIs = context.getResources().openRawResource(R.drawable.ceiling_texture); 

Bitmap bitmaps[] = new Bitmap[6]; 
bitmaps[0] = null; 
bitmaps[1] = null; 
bitmaps[2] = null; 
bitmaps[3] = null; 
bitmaps[4] = null; 
bitmaps[5] = null; 
      try{ 
       bitmaps[0] = BitmapFactory.decodeStream(floorIs); 
       bitmaps[1] = BitmapFactory.decodeStream(wallIs); 
       bitmaps[2] = BitmapFactory.decodeStream(wallWindowIs); 
       bitmaps[3] = BitmapFactory.decodeStream(ceilingIs); 
       bitmaps[4] = BitmapFactory.decodeStream(wallIs2); 
       bitmaps[5] = BitmapFactory.decodeStream(wallIs3); 
      } 
      finally{ 
       try{ 
        floorIs.close(); 
        floorIs = null; 
        wallIs.close(); 
        wallIs = null; 
        wallIs2.close(); 
        wallIs2 = null; 
        wallIs3.close(); 
        wallIs3 = null; 
        wallWindowIs.close(); 
        wallWindowIs = null; 
        ceilingIs.close(); 
        ceilingIs = null; 
       } 
       catch(IOException e){} 
      } 

在此之後嘗試將位圖加載到您使用

imageView.setImageBitmap(bitmap[0]); 
0

這可能是有點幼稚的問題,而是因爲這在你的onCreate正在發生()回調,並且您得到該ImageView的空指針異常,您是否忘記調用setContentView來擴展您的佈局?有可能您的佈局從未創建過,這意味着您正在嘗試繪製的視圖也不存在。

+0

如果我不設置ImageView,它將顯示自定義警報對話框。 – rexer