android - 无法从 BottomSheetDialog 启动Activity
问题描述
在这种情况下,每件事都可以正常工作,ctw = ContextThemeWrapper(cont, R.style.AppTheme)
但是当我想开始任何活动时,我的应用程序崩溃了。实际上,此 ctw 在此方法中与 Toast 可以正常工作,但是当我将此 ctw 传递给 Intent 以启动活动时,会出现错误。我也尝试直接使用 cont 变量 getApplicationContext 但仍然有同样的错误。代码在 kotlin 中,你也可以在 java 中帮助我。:)
这是完整的代码
fun showBottomSheetDialog(url: String, cont: Context) {
ctw = ContextThemeWrapper(cont, R.style.AppTheme)
val lin_play: LinearLayout
val lin_cancel: LinearLayout
dialog = BottomSheetDialog(ctw!!)
dialog.setContentView(R.layout.dialog_bottom_dailymotion)
dialog.getWindow()!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
dialog.getWindow()!!.setBackgroundDrawableResource(R.color.Transparent)
lin_play = dialog.findViewById(R.id.lin_play_d)!!
lin_cancel = dialog.findViewById(R.id.lin_cancel_d)!!
lin_play.setOnClickListener {
if (TextUtils.isEmpty(url)) {
Toast.makeText(ctw, "Invalid/Empty URL", Toast.LENGTH_SHORT).show()
} else {
if (!url!!.isEmpty()) {
startActivity(Intent(ctw, MainActivity::class.java).putExtra("url", url))
dialog.dismiss()
}
}
}
lin_cancel.setOnClickListener {
dialog.dismiss()
}
try {
dialog.show()
}catch (e:Exception){
e.printStackTrace()
}
}
这是我的错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.browserforvideodownload, PID: 29839
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
at android.app.Activity.startActivityForResult(Activity.java:4367)
at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:68)
at android.app.Activity.startActivityForResult(Activity.java:4312)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:751)
at android.app.Activity.startActivity(Activity.java:4716)
at android.app.Activity.startActivity(Activity.java:4631)
at com.browserforvideodownload.browserlighting.browser.activity.BrowserActivity$showBottomSheetDialogDailymotion$1.onClick(BrowserActivity.kt:3970)
at android.view.View.performClick(View.java:5740)
at android.view.View$PerformClick.run(View.java:22947)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:232)
at android.app.ActivityThread.main(ActivityThread.java:6661)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1106)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
编辑:
经过长时间的奋斗,我找到了我的错误。
只需更换
startActivity(Intent(ctw, MainActivity::class.java).putExtra("url", url))
进入
try{
ctw!!.startActivity(Intent(getActivity(ctw),
MainActivity::class.java).putExtra("url", url))
}catch (e:Exception){
e.printStackTrace()
}
解决方案
java.lang.NullPointerException:尝试调用虚拟方法
你应该使用Context
对象。AContext
作为它的第一个参数(这是因为 Activity 类是 Context 的子类)。
lin_play.setOnClickListener
{
if (TextUtils.isEmpty(url)) {
Toast.makeText(cont, "Invalid/Empty URL", Toast.LENGTH_SHORT).show()
} else {
if (!url!!.isEmpty()) {
startActivity(Intent(cont, MainActivity::class.java).putExtra("url", url))
dialog.dismiss()
}
}
笔记
- 对于 Activity--> 你可以设置你的 Context is-->
this@Activity
Name - 对于片段 --> 使用
getActivity()
例子
startActivity(Intent(getActivity(), MainActivity::class.java).putExtra("url", url))
推荐阅读
- r - 如何通过链接我的 csv 文件使我闪亮的应用程序对我的过滤器产生反应
- angular - 在多列中显示 formArray 输入
- c# - 使用属性名称将类转换为 EF 类
- graphql - Amplify GraphQL 订阅返回 null
- spring - 使用“in”运算符的 Spring JPA 查询问题
- mule4 - Mule 4 : For Each : org.mule.runtime.api.metadata.TypedValue 不能转换为 java.util.Map
- .net - 连接大型机时不支持超过 2147483647 的 SSH.NET 数据
- google-apps-script - GoogleScript getSheetbyName 错误 null - 我该如何解决?
- python - 用熊猫打开一个压缩的 excel 文件
- c++ - 如何设置 Visual Studio 输出目录?