当前位置: 首页 > 知识库问答 >
问题:

无原因自动返回上一个活动屏幕

孔深
2023-03-14

我有一个活动叫做LoanActivity。我从MapsActivity开始参加这个活动。然而,在LoanActivity上运行几秒钟后,它会返回到MapsActivity,而我什么也不做。我需要修复它,但我不确定为什么会发生。

我正在尝试更新数据库:

  1. Locker对象使其在此处不可用(其唯一id已从MapsActivity传递到此处),

我正在复制下面的代码:

class LoanActivity : AppCompatActivity() {

    private lateinit var locationsText: EditText  //to show locker name
    private lateinit var Results: EditText        //to show locker address
    private lateinit var loanLogoutButton: Button

    private lateinit var firebaseDatabase: FirebaseDatabase
    var aTool: Tool? =null
    var thelocker: Locker?=null
    var lockerName = "XXX"
    var lockerAddress = "YYY"
    var id: String? = ""

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_loan)

        firebaseDatabase = FirebaseDatabase.getInstance()

        locationsText = findViewById(R.id.locationsText)
        Results = findViewById(R.id.Results)
        loanLogoutButton= findViewById(R.id.loanLogoutButton)
        loanLogoutButton.isEnabled

        val intent = getIntent()
        //grab the data passed from MapsActivity
        //id of the loan, use this to find other details of it from the database
        id = intent?.getStringExtra("IDofLI")
        //name of the locker is unique, get other details from the database
        val nameOfLocker = intent.getStringExtra("MARKERTITLE")
        val lockerLT = intent.getDoubleExtra("MARKERLT", 0.0)
        val lockerLG = intent.getDoubleExtra("MARKERLG", 0.0)
        doAsync {
            //Find the locker with id, and make it unavailable
            //We will put this loaned item in it
            val reference = firebaseDatabase.getReference("Locker")
            val addValueEventListener =
                reference.addValueEventListener(object : ValueEventListener {

                    override fun onCancelled(error: DatabaseError) {
                        Log.d("LoanA", "3:onCreate")
                        runOnUiThread {
                            Toast.makeText(
                                this@LoanActivity,
                                "Failed to reach database: $error!",
                                Toast.LENGTH_LONG
                            ).show()
                        }
                    }

                    override fun onDataChange(data: DataSnapshot) {
                          data.children.forEach { child ->
                            val locker = child.getValue(Locker::class.java)

                            if (locker != null && locker.name == nameOfLocker) {

                                //This is how you update the database entry
                                var dr = reference.child(child.key.toString())
                                //Create a brand new locker, same as old one, but set available field to 0
                                thelocker = Locker(
                                    locker.name,
                                    locker.day,
                                    locker.month,
                                    locker.year,
                                    0,
                                    locker.zip,
                                    locker.address,
                                    locker.RenterEmail,
                                    locker.LoanerEmail,
                                    locker.rOrl,  //rent or loan
                                    locker.lat,
                                    locker.longt
                                )
                                lockerAddress = locker.address
                                lockerName = locker.name
                                dr.setValue(thelocker)
                                locationsText.setText(lockerName)
                                Results.setText(lockerAddress)
                            }
                        }

                    }

                })

            //Find the Loan item with id
            //Update it in the database to have the lockerName
            val reference2 = firebaseDatabase.getReference("Tool/Loan")
            val addValueEventListener2 =
                reference2.addValueEventListener(object : ValueEventListener {
                    override fun onCancelled(error: DatabaseError) {

                        runOnUiThread {
                            Toast.makeText(
                                this@LoanActivity,
                                "Failed to reach database: $error!",
                                Toast.LENGTH_LONG
                            ).show()
                        }
                    }

                    override fun onDataChange(data: DataSnapshot) {
                         data.children.forEach { child ->
                            val tool = child.getValue(Tool::class.java)

                            if (tool != null && child.key.toString() == id) {
                                Log.d(
                                    "TOOL_FOUND*",
                                    "Item being loaned is updated in DB: id=" + child.key
                                )
                                //This is how you update the database entry
                                var dr = reference2.child(child.key.toString())
                                //create a brand new tool, same as old one, but set lockerName
                                aTool = Tool(
                                    tool.day,
                                    tool.month,
                                    tool.year,
                                    tool.type,
                                    tool.available,
                                    tool.zip,
                                    tool.host,
                                    tool.guest,
                                    tool.rOrl,  //rent or loan
                                    nameOfLocker,
                                    lockerLT,
                                    lockerLG,
                                    tool.price
                                )
                                dr.setValue(aTool)
                            }
                        }
                        Log.d("LoanA", "11")
                    }
                })
            Log.d("LoanA", "12")
        }

        loanLogoutButton.setOnClickListener {
            Log.d("LoanA", "13")
            //send the id of this restaurant to the next screen for reviews
            val intent2 = Intent(this@LoanActivity, MainActivity::class.java)
            startActivity(intent2)
        }
    }
}

日志中没有例外:我有这个:2020-02-11 22:35:30.211 10084-10127/android。比格纳德兰奇。project1 D/EGL_仿真:eglMakeCurrent:0xe0a85600:ver 3 0(tinfo 0xe0a833d0)2020-02-11 22:35:30.221 10084-10542/android。比格纳德兰奇。project1 D/EGL_仿真:eglCreateContext:0xc436c980:maj 1 min 0 rcv 1 2020-02-11 22:35:31.055 10084-10542/android。比格纳德兰奇。project1 D/EGL_仿真:eglMakeCurrent:0xc436c980:ver 10(tinfo 0xc5fa8210)2020-02-11 22:35:31.086 10084-10084/android。比格纳德兰奇。project1 I/编舞:跳过56帧!应用程序可能在其主线程上做了太多工作。2020-02-11 22:35:31.097 10084-10127/Android。比格纳德兰奇。project1 I/OpenGLRenderer:Davey!持续时间=948ms;Flags=0,IntendedVsync=31654948913988,Vsync=31655882247284,OldestInputEvent=9223372036854775807,NewestInputEvent=0,HandleInputStart=31655888412820,AnimationStart=31655888480620,PerformTraversalsStart=31655888514520,DrawStart=316558858120,SyncQueued=31655888793620,SyncStart=31655890131720,IssueDrawCommandsStart=31655890241220,SwapBuffers=31655893764920,FrameCompleted=31655899112020,DequeueBufferDuration=817000,QueueBufferDuration=1703000,2020-02-11 22:35:36.905 10084-10084/android。比格纳德兰奇。project1 E/SchedPolicy:set_timerslock_ns write失败:不允许操作2020-02-11 22:35:36.917 10084-10127/android。比格纳德兰奇。project1 D/EGL_仿真:eglMakeCurrent:0xe0a85600:ver 30(tinfo 0xe0a833d0)2020-02-11 22:36:00.230 10084-10542/android。比格纳德兰奇。project1 D/EGL_仿真:eglMakeCurrent:0xc436c980:ver 1 0(tinfo 0xc5fa8210)2020-02-11 22:36:01.110 10084-10084/android。比格纳德兰奇。project1 E/SchedPolicy:set_timerslock_ns write失败:不允许操作2020-02-11 22:36:01.157 10084-10127/android。比格纳德兰奇。project1 D/EGL_仿真:eglMakeCurrent:0xe0a85600:ver 3 0(tinfo 0xe0a833d0)

共有2个答案

寿毅庵
2023-03-14

日志中没有例外:我有这个:2020-02-11 22:35:30.211 10084-10127/android.bignerdranch.project1 D/EGL_emulation: eglMake电流: 0xe0a85600: ver 3 0(tinfo 0xe0a833d0) 2020-02-11 22:35:30.221 10084-10542/android.bignerdranch.project1 D/EGL_emulation: eglCreateContext: 0xc436c980: maj 1 min 0RCV1 2020-02-11 22:35:31.055 10084-10542/android.bignerdranch.project1 D/EGL_emulation: eglMake电流: 0xc436c980: ver 1 0(tinfo 0xc5fa8210) 2020-02-11 22:35:31.086 10084-10084/android.bignerdranch.project1我/编舞:跳过56帧!应用程序可能在其主线程上做了太多的工作。2020-02-11 22:35:31.097 10084-10127/android.bignerdranch.project1 I/OpenGL渲染器:Davey!

Logcat显示您正在UI线程上执行一些繁重的任务,这就是应用程序崩溃的原因。

慕兴平
2023-03-14

看起来你的应用程序在LoanActive上一段时间后崩溃了,这就是为什么它会返回到MapsActive。当它返回到MapsActive时,请查看您的日志

希望这对你有帮助。

 类似资料:
  • 问题内容: 在我的应用程序中,我有两个活动。首先是启动屏幕,它仅显示应用程序名称和其他一些信息。单击初始屏幕活动后,我正在加载主要活动。我的应用程序运行正常,但遇到一个小问题。如果我从主要活动中按返回按钮,则控件将启动初始屏幕活动。但我不想再次显示启动画面活动,我想避免在按“后退”按钮时启动画面。 可能吗?如果可以,怎么办? 问题答案: 在文件中,在初始屏幕中添加属性。

  • 所以我有一个打开活动的通知: 我制作的活动是一个简单的对话框样式的活动。当我从通知抽屉中打开活动时,在任何其他应用程序上,如facebook、whatsapp、chrome浏览器等,活动就会按预期打开。问题是当我试图关闭它,并回到以前的应用程序。 单击对话框中创建的“关闭”按钮时: 同样的事情发生了:活动结束了,但我要回到主屏幕,而不是上一个应用程序。为什么?? *注意:以前的应用程序仍然在后台工

  • 在我的应用程序中,当我从后台回来时,我的活动会自动接近,并且它总是显示以前的活动。示例:我用活动A启动应用程序 }

  • 我在一个活动中有一个列表视图,在自定义适配器中有一个信息图标。当用户点击该信息按钮时,下一个活动将打开,当用户点击更新按钮时,在下一个活动中标记出勤率后,第二个活动应该完成,第一个活动列表视图应该更新。 我成功地做了什么:我已经成功地标记了出席情况并更改了listview的颜色,但我在关闭第二个活动并重新启动第一个活动后这样做了。通过这种方式,由于再次开始活动,listview会得到更新。 我无法

  • 我已经分享了在我的应用程序中使用的首选项,但现在只有四个活动。第一个活动是带有复选框的回收站视图,并且使用类为每个复选框保存(在回收站适配器中)。然后,下一个活动将作为一个包含随机项目列表的片段的tablayout启动。 当用户单击

  • 我有第一活动,它通过意图调用第二活动 在SecondActivity完成后,我希望SecondActivity向FirstActivity发送一些变量。然后调用finsih(),它将返回到第一个活动。如何使SecondActivity发送变量并在FirstActivity中获得结果?