发表于: 2018-11-11 23:03:40
0 843
一、今天完成的事情
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报空指针的原因
评论