【问题标题】:Null pointer exception while converting layout to bitmap将布局转换为位图时出现空指针异常
【发布时间】:2012-10-10 14:13:47
【问题描述】:

保存布局时出现空指针异常错误:

我创建图像的代码是:

private void mSavePhoto()
            {
            String str=mGetTime1();
            str1="/"+str+".png";
            Log.e("str1", str1);
            mLinLayMain = (LinearLayout)findViewById(R.id.xLinLayMain);
            mLinLayMain.setDrawingCacheEnabled(true);
            mLinLayMain.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            mLinLayMain.layout(0, 0, mLinLayMain.getMeasuredWidth(), mLinLayMain.getMeasuredHeight()); 
            mLinLayMain.buildDrawingCache(true);

                    Bitmap mBitMap = Bitmap.createBitmap(mLinLayMain.getDrawingCache());
                     mBitMap=mLinLayMain.getDrawingCache();


             file = new File(Environment.getExternalStorageDirectory().getPath() + str1);
            try 
                {
                    file.createNewFile();
                    FileOutputStream ostream = new FileOutputStream(file);
                    mBitMap.compress(CompressFormat.PNG, 90, ostream);
                    ostream.close();
                    if(flag==1) // if Created image is to be saved in gallery
                        {
                            MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
                            flag=0;
                        }
                    else if(flag==2) // if created image is to be sent as attachment with mail then there is no need of saving it to gallery.
                        {
                            flag=0;
                        }
                    mLinLayMain.setDrawingCacheEnabled(false); // clear drawing cache
                } 
            catch (Exception e) 
                {
                    e.printStackTrace();
                    flag=0;
                }

            }// END mSavePhoto()

我的布局xml代码是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@drawable/img_background"
    android:id="@+id/xRelLay"
    android:visibility="gone">
    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/topbar"
        android:layout_alignParentTop="true"
        android:id="@+id/rel">
<ImageView android:id="@+id/xIvLogo"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/topbar_logo"
                    android:layout_centerInParent="true"/>

    </RelativeLayout>
<ImageView android:id="@+id/xIvBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/back"
        android:layout_marginLeft="10dip"
        android:layout_marginTop="10dip"
        android:layout_below="@+id/rel"/>
    <TextView android:id="@+id/xTvComingSoon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Coming Soon"
        android:textSize="60dip"
        android:textColor="#ffff00"
        android:layout_centerInParent="true"/>
</RelativeLayout>
<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@drawable/img_background"
    android:id="@+id/xLinLayMain"
    android:visibility="visible">
    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/topbar"
        android:orientation="horizontal"
        android:layout_marginLeft="4dip"
        android:layout_marginRight="4dip">
      <ImageView android:id="@+id/xIvLogo"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/topbar_logo"
                    android:layout_centerInParent="true"/>
    </RelativeLayout>
<LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
<LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="8dip"
        android:layout_marginRight="4dip">
        <LinearLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <TextView android:id="@+id/xTvLblLineSec"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Line Section"
                android:textColor="#ffff00"
                android:textSize="13dip"
                />
            <TextView android:id="@+id/xTvLblLineName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Line Name"
                android:textColor="#ffff00"
                android:textSize="13dip"
                />
             <TextView android:id="@+id/xTvLblBaseRef"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Base Ref."
                android:textColor="#ffff00"
                android:textSize="13dip"
               />
        </LinearLayout>
        <LinearLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="5dip">
            <TextView android:id="@+id/xTvLblLineSec_Col"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=":"
                android:textColor="#ffff00"
                android:textSize="13dip"/>
            <TextView android:id="@+id/xTvLblLineName_Col"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=":"
                android:textColor="#ffff00"
                android:textSize="13dip"
                />
             <TextView android:id="@+id/xTvLblBaseRef_Col"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=":"
                android:textColor="#ffff00"
                android:textSize="13dip"
                />
        </LinearLayout>
        <LinearLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="5dip">
            <TextView android:id="@+id/xTvLblLineSec_Val"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"

                android:visibility="visible"/>
            <TextView android:id="@+id/xTvLblLineName_Val"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"
                  android:visibility="visible"/>
             <TextView android:id="@+id/xTvLblBaseRef_Val"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"
                android:visibility="visible"/>
        </LinearLayout>
    </LinearLayout>
<LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
<LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView android:id="@+id/xTvLblKilometerage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="KILOMETRAGE"
            android:textColor="#ffff00"
            android:textSize="30dip"
            android:layout_gravity="center_horizontal"
           />
        <TextView android:id="@+id/xTvMeterage_Val"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textColor="#ffff00"
            android:textSize="45dip"

            android:layout_gravity="center_horizontal"
            android:visibility="visible"
            />
         </LinearLayout>
<LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
        <TextView android:layout_width="fill_parent"
            android:layout_height="1dip"
            android:background="#ed9043"
            android:layout_marginLeft="4dip"
            android:layout_marginRight="4dip"/>
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"> 
            </LinearLayout>
<LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="8dip"
        android:layout_marginRight="4dip">
        <LinearLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <TextView android:id="@+id/xTvLblLatitue"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Latitude"
                android:textColor="#ffff00"
                android:textSize="13dip"
                  />
            <TextView android:id="@+id/xTvLblLongitude"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Longitude"
                android:textColor="#ffff00"
                android:textSize="13dip"
               />
             <TextView android:id="@+id/xTvLblDate_Now"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Date NOW"
                android:textColor="#ffff00"
                android:textSize="13dip"
             />
             <TextView android:id="@+id/xTvLblDate_Last"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Date LAST"
                android:textColor="#ffff00"
                android:textSize="13dip"
                 />
              <TextView android:id="@+id/xTvLblSpeed"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Speed"
                android:textColor="#ffff00"
                android:textSize="13dip"
                 />
              <TextView android:id="@+id/xTvLblOffSet"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Offset"
                android:textColor="#ffff00"
                android:textSize="13dip"
                 />
        </LinearLayout>
        <LinearLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="5dip">
            <TextView android:id="@+id/xTvLblLatitue_Col"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=":"
                android:textColor="#ffff00"
                android:textSize="13dip"
                 />
            <TextView android:id="@+id/xTvLblLongitude_Col"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=":"
                android:textColor="#ffff00"
                android:textSize="13dip"
                />
             <TextView android:id="@+id/xTvLblDate_Col_Now"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=":"
                android:textColor="#ffff00"
                android:textSize="13dip"
                  />
             <TextView android:id="@+id/xTvLblDate_Col_Last"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=":"
                android:textColor="#ffff00"
                android:textSize="13dip"
                 />
              <TextView android:id="@+id/xTvLblSpeed_Col"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=":"
                android:textColor="#ffff00"
                android:textSize="13dip"
                 />
              <TextView android:id="@+id/xTvLblOffSet_Col"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=":"
                android:textColor="#ffff00"
                android:textSize="13dip"
                  />
        </LinearLayout>
        <LinearLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginLeft="5dip">
             <TextView android:id="@+id/xTvLatitue_Val"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"
                android:visibility="visible"/>
            <TextView android:id="@+id/xTvLongitude_Val"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"
               android:visibility="visible"/>
            <LinearLayout android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
             <TextView android:id="@+id/xTvDate_Now_Val"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"
               android:visibility="visible"/>
             <DigitalClock
                android:id="@+id/digitalClock1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="DigitalClock" 
                android:textColor="#ffff00"
                android:textSize="13dip"
                android:layout_marginLeft="5dip"
                />
              <TextView android:id="@+id/xTvDigClk_Text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"
             android:visibility="gone"/>
             </LinearLayout>
             <TextView android:id="@+id/xTvDate_Last_Val"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"
android:visibility="visible"/>
              <TextView android:id="@+id/xTvSpeed_Val"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"
              android:visibility="visible"/>
              <TextView android:id="@+id/xTvOffSet_Val"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="#ffff00"
                android:textSize="13dip"
             android:visibility="visible"/>
        </LinearLayout>
    </LinearLayout>
<LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
<LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bottombar"
        android:orientation="horizontal"
        android:layout_marginLeft="4dip"
        android:layout_marginRight="4dip">
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
       <RelativeLayout android:id="@+id/xRelLayContacts"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="4dip">
         <ImageView android:id="@+id/xIvContact"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/contact_normalicon"
                    android:visibility="visible"
                    android:layout_centerHorizontal="true"/>
         <TextView android:id="@+id/xTvContact"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_below="@+id/xIvContact"
             android:text="CONTACTS"
             android:textColor="#ffff00"
             android:textSize="12dip"
            android:layout_marginTop="2dip"
             android:layout_centerHorizontal="true"/>
         </RelativeLayout>
       <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
        <RelativeLayout android:id="@+id/xRelLayInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        android:layout_marginTop="4dip">
         <ImageView android:id="@+id/xIvInfo"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/info_normalicon"
                    android:visibility="visible"
                    android:layout_centerHorizontal="true"/>
         <TextView android:id="@+id/xTvInfo"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_below="@+id/xIvInfo"
             android:text=" INFO "
             android:textColor="#ffff00"
             android:textSize="12dip"
                android:layout_marginTop="2dip"
            android:layout_centerHorizontal="true"/>
         </RelativeLayout>
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
        <ImageView android:id="@+id/xIvStart"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/start_2"
                    android:layout_gravity="center_vertical"
                    android:visibility="visible"/>

        <ImageView android:id="@+id/xIvStop"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/stop_2"
                    android:layout_gravity="center_vertical"
                    android:visibility="gone"/>
          <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
       <RelativeLayout android:id="@+id/xRelLayEmail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
          android:layout_marginTop="4dip">
         <ImageView android:id="@+id/xIvEmail"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/email_normalicon"
                    android:visibility="visible"
                    android:layout_centerHorizontal="true"/>
         <TextView android:id="@+id/xTvEmail"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_below="@+id/xIvEmail"
             android:text=" E-MAIL "
             android:textColor="#ffff00"
             android:textSize="12dip"
              android:layout_marginTop="2dip"
         android:layout_centerHorizontal="true"/>
         </RelativeLayout>
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
        <RelativeLayout android:id="@+id/xRelLayPhoto"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
          android:layout_marginTop="4dip">
        <ImageView android:id="@+id/xIvPhotos"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/photo_normalicon"
                    android:layout_centerHorizontal="true"/>
        <TextView android:id="@+id/xTvPhotos"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_below="@+id/xIvPhotos"
             android:text=" PHOTO "
             android:textColor="#ffff00"
             android:textSize="12dip"
              android:layout_marginTop="2dip"
       android:layout_centerHorizontal="true"/>
          </RelativeLayout>
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
        </LinearLayout>
    </LinearLayout>
    </LinearLayout>
</LinearLayout>

我正在为所有文本视图设置字体。

我的日志猫:

10-10 19:12:34.560: W/System.err(12434): java.lang.NullPointerException
10-10 19:12:34.565: W/System.err(12434):    at android.graphics.Bitmap.createBitmap(Bitmap.java:455)
10-10 19:12:34.565: W/System.err(12434):    at org.abc.artc.ARTCActivity.mSavePhoto(ARTCActivity.java:434)
10-10 19:12:34.565: W/System.err(12434):    at org.abc.artc.ARTCActivity.onClick(ARTCActivity.java:343)
10-10 19:12:34.565: W/System.err(12434):    at android.view.View.performClick(View.java:3591)
10-10 19:12:34.565: W/System.err(12434):    at android.view.View$PerformClick.run(View.java:14263)
10-10 19:12:34.565: W/System.err(12434):    at android.os.Handler.handleCallback(Handler.java:605)
10-10 19:12:34.570: W/System.err(12434):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-10 19:12:34.570: W/System.err(12434):    at android.os.Looper.loop(Looper.java:137)
10-10 19:12:34.570: W/System.err(12434):    at android.app.ActivityThread.main(ActivityThread.java:4507)
10-10 19:12:34.575: W/System.err(12434):    at java.lang.reflect.Method.invokeNative(Native Method)
10-10 19:12:34.575: W/System.err(12434):    at java.lang.reflect.Method.invoke(Method.java:511)
10-10 19:12:34.575: W/System.err(12434):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
10-10 19:12:34.580: W/System.err(12434):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
10-10 19:12:34.580: W/System.err(12434):    at dalvik.system.NativeStart.main(Native Method)

提前致谢

【问题讨论】:

  • 在 org.abc.artc.ARTCActivity.mSavePhoto(ARTCActivity.java:434) 这条线在哪里?
  • mSavePhoto() 是一个在单击按钮时调用的函数。 “这条线在哪里”是什么意思?
  • 第 434 行可能是这样的:Bitmap mBitMap = Bitmap.createBitmap(mLinLayMain.getDrawingCache());。我的猜测是 NPE 发生在 createBitmap() 内。您可能需要检查 getDrawingCache() 返回的值,因为它可能为空。

标签: android


【解决方案1】:

感谢大家的快速响应。上面的代码在 2.3 中运行良好,但在 4.0 及更高版本中抛出 NPE。这是因为我为子布局设置了边距,因此它返回 null。在 2.3 中,一旦图像保存完成,设备的屏幕就会闪烁。

【讨论】:

    【解决方案2】:

    在拨打mSavePhoto() 之前,您是先拨打setContentView(R.layout.viewGroup) 吗?

    您的mLinLayMain 正在获取NULL

    检查mLinLayMain 是否出现在您当前的布局文件中。

    【讨论】:

    • 试试 mLinLayMain = (LinearLayout)YouActivity.this.findViewById(R.id.xLinLayMain);
    【解决方案3】:

    您必须先在 mLinLayMain 上调用 layout,否则视图的维度为 0,0 并且位图将为空。

    换行

    mLinLayMain.buildDrawingCache(true);
    Bitmap mBitMap = Bitmap.createBitmap(mLinLayMain.getDrawingCache());
    

    mLinLayMain.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    mLinLayMain.layout(0, 0, mLinLayMain.getMeasuredWidth(), mLinLayMain.getMeasuredHeight()); 
    mLinLayMain.buildDrawingCache(true);
    Bitmap mBitMap = Bitmap.createBitmap(mLinLayMain.getDrawingCache());
    mLinLayMain.setDrawingCacheEnabled(false);
    

    【讨论】:

      【解决方案4】:

      我们将哪个布局更改为位图,请参见此处 FrameLayout 更改为位图

      FrameLayout view = (FrameLayout)findViewById(R.id.framelayout);
      
      view.setDrawingCacheEnabled(true);
      
      view.buildDrawingCache();
      
      Bitmap bm = view.getDrawingCache();
      

      看看How to convert Views to bitmaps?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多