Получение текста из EditText в массиве - PullRequest
0 голосов
/ 18 июня 2020

По сей день у меня возникла небольшая проблема, я работал над этой темой несколько недель и до сих пор не могу понять, почему это не работает, я могу объяснить.

Для личного проекта мне нужно создать EditText динамически, а точнее массив EditText, поэтому мне удалось это сделать, но я не могу получить от них текст и отобразить его.

Сначала я спросил

P1.setText(playerName[id].getText().toString());

за исключением того, что я забыл, что у моей переменной id был ++, который был на месте, поэтому id, который я запрашивал в списке, еще не существовал, поэтому ошибка Попытка вызвать виртуальный метод 'android. text.Editable android .widget.EditText.getText () 'для ссылки на нулевой объект

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.jenaijamais, PID: 6450
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:7161)
        at android.view.View.performClickInternal(View.java:7138)
        at android.view.View.access$3500(View.java:811)
        at android.view.View$PerformClick.run(View.java:27419)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7520)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:7161) 
        at android.view.View.performClickInternal(View.java:7138) 
        at android.view.View.access$3500(View.java:811) 
        at android.view.View$PerformClick.run(View.java:27419) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:224) 
        at android.app.ActivityThread.main(ActivityThread.java:7520) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
        at com.example.jenaijamais.NumberOfPlayers.play(NumberOfPlayers.java:98)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
        at android.view.View.performClick(View.java:7161) 
        at android.view.View.performClickInternal(View.java:7138) 
        at android.view.View.access$3500(View.java:811) 
        at android.view.View$PerformClick.run(View.java:27419) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:224) 
        at android.app.ActivityThread.main(ActivityThread.java:7520) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

, поэтому для проведения теста я запросил 0 в списке, и всегда была одна и та же ошибка даже при заполнении EditText (я указываю, что я заполняю поля каждый раз, поэтому теоретически они не равны нулю), затем я попытался с той же самой ошибкой, которая не хочет возвращать текст.

Я указываю, что конечная цель - l oop весь текст полей и вставьте их в базу данных SQLite, но на данный момент я просто хочу провести несколько тестов без базы данных, чтобы убедиться, что она работает, но я не могу получить текст из ОДНОГО EditText, так много на данный момент, что даже не стоит об этом думать .

package com.example.jenaijamais;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.database.Cursor;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.io.Console;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;

public class NumberOfPlayers extends AppCompatActivity {

    public Button btnAdd;

    public DatabasePlayers databasePlayers;

    public ViewGroup layoutAddPlayer;
    public ViewGroup main;
    public int id = 1;
    public int id2 = 1;
    public EditText[] playerName;
    public TextView P1;

    @SuppressLint("ResourceType")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_number_of_players);

        databasePlayers = new DatabasePlayers(this);

        layoutAddPlayer = findViewById(R.id.addPlayerLayout);
        main = findViewById(R.id.addPlayerLayout2);
        btnAdd = findViewById(R.id.btnAdd);
        P1 = (TextView) findViewById(R.id.P1);

        for (int i = 1; i < 5; i++){
            playerName = new EditText[100];
            playerName[i] = new EditText(this);
            playerName[i].setId(id);
            playerName[i].setHint("Joueur n°"+playerName[i].getId());
            RelativeLayout.LayoutParams config = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            config.setMargins(0,8,0,8);
            config.addRule(RelativeLayout.BELOW, playerName[i].getId());
            layoutAddPlayer.addView(playerName[i],config);
            playerName[i] = (EditText) findViewById(i);

            id++;
        }
        //playerName[0] = (EditText) findViewById(1);
    }

    public void addPlayer(View view) {
        /*id++;
        playerName = new EditText[id--];
        playerName[id] = new EditText(this);
        playerName[id].setId(id);
        playerName[id].setHint("Joueur n°"+this.playerName[id].getId());
        RelativeLayout.LayoutParams config = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        config.setMargins(0,8,0,8);
        config.addRule(RelativeLayout.BELOW, playerName[id].getId());
        layoutAddPlayer.addView(playerName[id],config);

        id++;
        nameView = new TextView[id--];
        nameView[id] = new TextView(this);
        nameView[id].setId(id);
        nameView[id].setText("Player"+id);
        RelativeLayout.LayoutParams config2 = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        config2.setMargins(0, 8, 0, 8);
        config2.addRule(RelativeLayout.BELOW, nameView[id].getId());
        main.addView(nameView[id],config2);

        id++;
        //nameView[0].setText(String.valueOf(id));*/
    }

    public void play(View view) {
        P1.setText(playerName[0].getText().toString());
    }

    private void viewAll(){
        /*Cursor data = databasePlayers.getAllData();
        if (data.getCount() == 0){
            P1.setText("ERROR, NO DATA");
            return;
        }
        StringBuffer buffer = new StringBuffer();
        while (data.moveToNext()){
            buffer.append("playerID :" +data.getString(0)+"\n");
            buffer.append("playerName : "+data.getString(1)+"\n");
            buffer.append("playerScore : "+data.getString(2)+"\n");
        }
        P1.setText(buffer.toString());*/
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...