首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从startActivity从BottomSheetDialog

无法从startActivity从BottomSheetDialog
EN

Stack Overflow用户
提问于 2018-10-03 12:01:19
回答 3查看 744关注 0票数 0

在这个上下文中,每件事情都很好,ctw = ContextThemeWrapper(cont, R.style.AppTheme),但是当我想启动任何活动时,我的应用程序就崩溃了。实际上,此ctw在此方法中与Toast一起工作很好,但当我将此ctw传递给启动活动的意图时,会出现错误。我也直接尝试cont变量,getApplicationContext也有,但仍然有相同的错误。代码在kotlin中,您也可以在java中帮助我。:)

这是完整的代码

代码语言:javascript
复制
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()
             }
        }

这是我的错误

代码语言:javascript
复制
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)

编辑:

经过长时间的斗争,我终于找到了我的情人。

只需替换

代码语言:javascript
复制
 startActivity(Intent(ctw, MainActivity::class.java).putExtra("url", url))

转到

代码语言:javascript
复制
try{
ctw!!.startActivity(Intent(getActivity(ctw), 
MainActivity::class.java).putExtra("url", url))
   }catch (e:Exception){
     e.printStackTrace()
   }
EN

回答 3

Stack Overflow用户

发布于 2018-10-03 12:03:27

java.lang.NullPointerException:尝试调用虚拟方法

您应该使用Context对象。Context作为其第一个参数(因为活动类是上下文的子类)。

代码语言:javascript
复制
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()
            }
        }

注意事项

  1. 对于活动->您可以设置上下文是-> this@Activity名称
  2. 对于片段->使用getActivity()

示例

代码语言:javascript
复制
startActivity(Intent(getActivity(), MainActivity::class.java).putExtra("url", url))
票数 2
EN

Stack Overflow用户

发布于 2018-10-03 12:05:38

您正在使用错误的上下文,在意图中传递活动实例。

代码语言:javascript
复制
if (activity != null) {
    startActivity(Intent(activity, MainActivity::class.java).putExtra("url", url))
}

检查父活动是否为null,以获得最佳实践。

票数 1
EN

Stack Overflow用户

发布于 2018-10-03 12:10:40

在启动活动时,只需使用活动上下文即可。

代码语言:javascript
复制
startActivity(Intent(this@CurrentClassName, MainActivity::class.java).putExtra("url", url))

备注:在开始新活动之前,最好先取消对话框

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52626612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档