将布局转换为位图时出现空指针异常

时间:2012-10-10 14:13:47

标签: android

我在保存布局时遇到空指针异常错误:

我创建图片的代码是:

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>

我正在为所有textview设置字体。

我的Logcat:

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)

提前致谢

4 个答案:

答案 0 :(得分:1)

Thanx所有人快速回复..以上代码适用于2.3但在4.0及以上版本中抛出NPE。这是因为我已设置子布局的边距,因为它返回null。在2.3中,一旦保存图像,则设备的屏幕闪烁。

答案 1 :(得分:0)

您是否在致电setContentView(R.layout.viewGroup)之前致电mSavePhoto()

您的mLinLayMain正在NULL

检查当前布局文件中是否有mLinLayMain

答案 2 :(得分:0)

您必须先调用layout上的mLinLayMain,否则视图的维度为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);

答案 3 :(得分:0)

我们更改为位图的布局在此处看到FrameLayout更改为位图

FrameLayout view = (FrameLayout)findViewById(R.id.framelayout);

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap bm = view.getDrawingCache();

并查看How to convert Views to bitmaps?