3

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

我创建图像的代码是:

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)

提前致谢

4

4 回答 4

1

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

于 2012-10-11T13:53:33.433 回答
0

你打电话setContentView(R.layout.viewGroup)前打电话mSavePhoto()吗?

mLinLayMain的越来越NULL

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

于 2012-10-10T14:18:07.730 回答
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);
于 2012-10-10T14:27:41.673 回答
0

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

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

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap bm = view.getDrawingCache();

并查看如何将视图转换为位图?

于 2012-10-10T14:40:30.713 回答