Автоматически возвращается к предыдущему экрану активности без причины - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть активность под названием LoanActivity. Я go к этой деятельности от MapsActivity. Однако через несколько секунд на LoanActivity он возвращается к MapsActivity, и я ничего не делаю. Мне нужно это исправить, но я не уверен, почему это происходит.

Я пытаюсь обновить базу данных для:

  1. Объект Locker, чтобы сделать его здесь недоступным (его уникальный идентификатор был передан здесь из MapsActivity),
  2. Добавьте имя шкафчика, широту и долготу к объекту Loan в базе данных

Я копирую код ниже:

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)
        }
    }
}

Нет исключений в logcat: У меня есть это : 2020-02-11 22: 35: 30.211 10084-10127 / android .bignerdranch.project1 D / EGL_emulation: eglMakeCurrent: 0xe0a85600: версия 3 0 (tinfo 0xe0a833d0) 2020-02-11 22: 35: 30.221 10084-10542 /android.bignerdranch.project1 D / EGL_emulation: eglCreateContext: 0xc436c980: май 1 мин 0 rcv 1 2020-02-11 22: 35: 31.055 10084-10542 / android .bignerdranch.project1 D / EGL_emulation: eglcc 0: 0MC : ver 1 0 (tinfo 0xc5fa8210) 2020-02-11 22: 35: 31.086 10084-10084 / android .bignerdranch.project1 I / Хореограф: пропущено 56 кадров! Приложение может выполнять слишком много работы в своем основном потоке. 2020-02-11 22: 35: 31.097 10084-10127 / android .bignerdranch.project1 I / OpenGLRenderer: Davey! Продолжительность = 948ms; Флаги = 0, IntendedVsync = 31654948913988, Vsync = 31655882247284, OldestInputEvent = 9223372036854775807, NewestInputEvent = 0, HandleInputStart = 31655888412820, AnimationStart = 31655888480620, PerformTraversalsStart = 31655888514520, DrawStart = 31655888758120, SyncQueued = 31655888793620, SyncStart = 31655890131720, IssueDrawCommandsStart = 31655890241220, SwapBuffers = 31655893764920, FrameCompleted = 31655899112020, DequeueBufferDuration = 817000, QueueBufferDuration = 1703000, 2020-02-11 22: 35: 36.905 10084-10084 / android .bignerdranch.project1 E / SchedPolicy: не удалось выполнить операцию 2020: запись не выполнена 02: 11 22: 35: 36.917 10084-10127 / android .bignerdranch.project1 D / EGL_emulation: eglMakeCurrent: 0xe0a85600: ver 3 0 (tinfo 0xe0a833d0) 2020-02-11 22: 36: 00.230 10084-10542 / android. bignerdranch.project1 D / EGL_emulation: eglMakeCurrent: 0xc436c980: ver 1 0 (tinfo 0xc5fa8210) 2020-02-11 22: 36: 01.110 10084-10084 / android .bignerdranch.project1 E / SchedPolicy: не удалось разрешить операцию записи: set_timerslack_ns ted 2020-02-11 22: 36: 01.157 10084-10127 / android .bignerdranch.project1 D / EGL_emulation: eglMakeCurrent: 0xe0a85600: версия 3 0 (tinfo 0xe0a833d0)

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Нет исключений в logcat: У меня есть это: 2020-02-11 22: 35: 30.211 10084-10127 / android .bignerdranch.project1 D / EGL_emulation: eglMakeCurrent: 0xe0a85600: версия 3 0 (tinfo 0xe0a833d0) 2020 -02-11 22: 35: 30.221 10084-10542 / android .bignerdranch.project1 D / EGL_emulation: eglCreateContext: 0xc436c980: май 1 мин 0 rcv 1 2020-02-11 22: 35: 31.055 10084-10542 / android .bignerdranch.project1 D / EGL_emulation: eglMakeCurrent: 0xc436c980: ver 1 0 (tinfo 0xc5fa8210) 2020-02-11 22: 35: 31.086 10084-10084 / android .bignerdranch.project1 I / Хореограф: пропущено 56 кадров! Приложение может выполнять слишком много работы в своем основном потоке. 2020-02-11 22: 35: 31.097 10084-10127 / android .bignerdranch.project1 I / OpenGLRenderer: Davey!

Logcat показывает, что вы выполняете тяжелую задачу в потоке пользовательского интерфейса, поэтому приложение аварийно завершилось.

0 голосов
/ 11 февраля 2020

Похоже, ваше приложение падает после некоторого времени на LoanActivity, поэтому оно вернулось к MapsActivity. Пожалуйста, смотрите ваши журналы, когда он вернется к MapsActivity.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...