发表于: 2018-11-11 23:03:40

0 844


一、今天完成的事情

1.隐式Intent

隐式Intent并不明确指明要启动哪一个活动,而是通过指定action和category等信息,让系统去分析并响应启动合适的活动,即可以响应这个隐式Intent的活动。隐式Intent非常适合用来去启动系统应用。

调用系统拨号界面

在AndroidManifest中

<activity
   android:name=".activity.WorkerPageActivity"
   android:theme="@style/ColorTranslucentTheme">
   <intent-filter>
       <action android:name="android.intent.action.VIEW" />
       <category android:name="android.intent.category.DEFAULT" />
       <data android:scheme="tel" />
   </intent-filter>
</activity>

<action>标签指明当前活动可以响应android.intent.action.VIEW这个action的活动

<category>标签包含一些附加信息

<data>标签中通过Android:scheme指定数据协议为tel,表示拨打电话。

case R.id.bt_call:
   if (!workerPhoneNumber.equals("")) {
       Intent intent = new Intent(Intent.ACTION_DIAL);
       intent.setData(Uri.parse("tel:" + workerPhoneNumber));
       startActivity(intent);
   }
   break;


2.通过FindViewById获取控件对象为null,运行时报错空指针

布局文件

<View

        android:id="@+id/glass_view"

        android:layout_width="0dp"

        android:layout_height="0dp"

        android:background="@color/transparent"

        android:clickable="true"

        android:focusable="true"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toBottomOf="@+id/view_top" />


代码

private View glassView;

......

glassView = (View) findViewById(R.id.view_glass);

glassView.setVisibility(GONE);

glassView.setOnClickListener(new MyOnClickListener());


log

2018-11-10 20:41:32.250 25639-25639/? E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.example.forrestsu.logintest, PID: 25639

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.forrestsu.logintest/com.example.forrestsu.logintest.activity.MapModeActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2822)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2897)

        at android.app.ActivityThread.-wrap11(Unknown Source:0)

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1598)

        at android.os.Handler.dispatchMessage(Handler.java:105)

        at android.os.Looper.loop(Looper.java:251)

        at android.app.ActivityThread.main(ActivityThread.java:6572)

        at java.lang.reflect.Method.invoke(Native Method)

        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference

        at com.example.forrestsu.logintest.activity.MapModeActivity.initView(MapModeActivity.java:96)

        at com.example.forrestsu.logintest.activity.MapModeActivity.onCreate(MapModeActivity.java:86)

        at android.app.Activity.performCreate(Activity.java:6975)

        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2775)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2897) 

        at android.app.ActivityThread.-wrap11(Unknown Source:0) 

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1598) 

        at android.os.Handler.dispatchMessage(Handler.java:105) 

        at android.os.Looper.loop(Looper.java:251) 

        at android.app.ActivityThread.main(ActivityThread.java:6572) 

        at java.lang.reflect.Method.invoke(Native Method) 

        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 


原因

控件id写错了,布局文件中控件的id是glass_view,而findViewById中写的是view_glass,那么为什么编译器没有提示错误呢,因为在其他布局文件中刚好有一个控件id也是view_glass,findViewById引用了其他布局中的同名控件,所以编译器没有提示,但实际运行时时无法获取其他布局中的控件的,所以报了空指针。

总结

findViewById()报空指针错误一般有以下几种情况

1.布局文件有问题;

2.在设置contentView之前findViewById();

3.以前使用Eclipse开发时需要clean项目。


二、明天计划的事情

      继续完善细节问题,完成任务七。


三、遇到的问题

    


四、收获

   隐式Intnent;

   findViewById报空指针的原因




返回列表 返回列表
评论

    分享到