По сей день у меня возникла небольшая проблема, я работал над этой темой несколько недель и до сих пор не могу понять, почему это не работает, я могу объяснить.
Для личного проекта мне нужно создать 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());*/
}
}