Как исправить ошибку на нулевой ссылке на объект? - PullRequest
0 голосов
/ 12 марта 2020

UPDATE! 12/03

Параметры базы данных:

class IS4(context: Context, name : String?, factory:SQLiteDatabase.CursorFactory?, version : Int) :
    SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_VERSION) {

Ошибка при импорте БД

Ошибка

Ну, я пытался fini sh мой грубый, но я заблокирован в этой ошибке, когда я пытаюсь открыть макет, он закрывается и отправляет мне это сообщение об ошибке:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jetpackteste/com.example.jetpackteste.create_cliente_upd}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.material.floatingactionbutton.FloatingActionButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3447)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3594)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2146)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:237)
    at android.app.ActivityThread.main(ActivityThread.java:7777)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.material.floatingactionbutton.FloatingActionButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at com.example.jetpackteste.create_cliente_upd.deleteData(create_cliente_upd.kt:62)
    at com.example.jetpackteste.create_cliente_upd.onCreate(create_cliente_upd.kt:41)
    at android.app.Activity.performCreate(Activity.java:7981)
    at android.app.Activity.performCreate(Activity.java:7970)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)

Проблема:

Когда я запускаю программу, он создает sh, когда я открываю макет create_clients_upd

Забава удаления базы данных

fun deleteData(codigo_cliente: String) : Int {

    val db = this.writableDatabase
    return  db.delete(CLIENTES_TABLE_NAME, "ID = ?", arrayOf(codigo_cliente))
}

Макет classe create_cliente_upd

internal var helper = IS4(this)






override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val clientes = intent.extras?.getParcelable<clientes>("cliente_key")

    deleteData()


    //comando fullscreen

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_create_cliente_upd)

    fillDatas(clientes)

    //apresenta na imagem a toolbar para voltar atras


    setSupportActionBar(toolbar_activity)
    supportActionBar?.setDisplayHomeAsUpEnabled(true)
}

fun deleteData(){
    delete_button.setOnClickListener{

        helper.deleteData(IDinput_upd.text.toString())
    }
}

кнопка в том же макете, но он его не узнает

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Вы должны поставить setContentView(R.layout.activity_create_cliente_upd) строку перед вызовом функции deleteData. Поскольку IDinput_upd инициализируется после метода setContentView.

0 голосов
/ 12 марта 2020

Сначала необходимо установить идентификатор для delete_button в файле макета, он расположен следующим образом:

android:id="@+id/btn_delete"

Затем вам нужно использовать функцию поиска по идентификатору, чтобы получить экземпляр, прежде чем устанавливать прослушиватель щелчков. так что вы можете работать с ним в своем коде:

delete_button = findViewById(R.id.btn_delete)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...