java .lang.NullPointerException: для пустой ссылки на объект - PullRequest
0 голосов
/ 02 апреля 2020
    package com.example.testapp

import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.hanks.passcodeview.PasscodeView


class Main2Activity : AppCompatActivity() {

    var  EXTRA_TEXT ="fintech"
    private var PRIVATE_MODE = 0
    private val PREF_NAME = "myref"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val sharedPref: SharedPreferences = getSharedPreferences(PREF_NAME, PRIVATE_MODE)
        var passcodeView=findViewById<PasscodeView>(R.id.passcodeView)
        passcodeView.setPasscodeLength(4).listener = object :
            PasscodeView.PasscodeViewListener{
            override fun onSuccess(number: String?) {
                if (sharedPref.getBoolean(PREF_NAME, false)) {
                    val homeIntent = Intent(applicationContext, AfterloginActivity::class.java)
                    homeIntent.putExtra("fintech",number)
                    startActivity(homeIntent)
                    finish()
                } else {
                    setContentView(R.layout.activity_main2)
                    val editor = sharedPref.edit()
                    editor.putBoolean(PREF_NAME, true)
                    editor.apply()
                }
            }

            override fun onFail() {
                Toast.makeText(this@Main2Activity,"wrong",Toast.LENGTH_SHORT).show()
            }
        }
    }
}

это мой исходный код, и я получаю эту ошибку:

 Process: com.example.testapp, PID: 11939
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testapp/com.example.testapp.Main2Activity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.hanks.passcodeview.PasscodeView com.hanks.passcodeview.PasscodeView.setPasscodeLength(int)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.hanks.passcodeview.PasscodeView com.hanks.passcodeview.PasscodeView.setPasscodeLength(int)' on a null object reference
        at com.example.testapp.Main2Activity.onCreate(Main2Activity.kt:46)
        at android.app.Activity.performCreate(Activity.java:5937)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
        at android.app.ActivityThread.access$800(ActivityThread.java:144) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5221) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
04-02 14:39:57.454 11939-11939/? I/Process: Sending signal. PID: 11939 SIG: 9

, если я помещу ниже "setContentView (R.layout.activity_main2)", чтобы создать его работу, но я хочу сделать его одноразовым входом только поэтому я положил его, а затем я получил эту ошибку "java .lang.NullPointerException: попытка вызвать виртуальный метод" com.hanks.passcodeview.PasscodeView com.hanks.passcodeview.PasscodeView.setPasscodeLength (int) 'на пустом месте ссылка на объект "Спасибо

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Если вы не позвоните setContentView(), все вызовы findViewById() вернутся null. passcodeView значение null является причиной вашего NullPointerException.

Невозможно запустить AfterloginActivity до setContentView(), потому что вы полагаетесь на passCodeView, чтобы добавить что-то в Намерение, когда вы делаете homeIntent.putExtra("fintech",number).

0 голосов
/ 02 апреля 2020

Ваша ошибка вызвана этой строкой:

var passcodeView=findViewById<PasscodeView>(R.id.passcodeView)

Вы пытаетесь найти представление, если у вас нет setContentView для действия.

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