2012-11-06 71 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