Я пытаюсь создать приложение, которое генерирует пароль, а затем сохраняет его на отдельной странице в приложении для просмотра пользователем. Для этого у меня есть кнопка для генерации пароля и другая, которая должна сохранить этот пароль на другой странице. У меня возникли проблемы с использованием setText в одном классе для обновления TextView другого класса/действия.
Класс с кнопками.
public class Generate extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gen);
final TextView passText = (TextView) findViewById(R.id.passText);
//final TextView savedText = (TextView) findViewById(R.id.savedText);
Button generatePassword = (Button) findViewById(R.id.generatePassword);
Button savePassword = (Button) findViewById(R.id.savePassword);
generatePassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int passwordLength = 16;
String allowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&";
char[] allowedCharsArray = allowedChars.toCharArray();
char[] chars = new char[passwordLength];
Random random = new Random();
for (int i = 0; i < passwordLength; i++) {
chars[i] = allowedCharsArray[random.nextInt(allowedChars.length())];
}
passText.setText(chars, 0, passwordLength);
}
});
savePassword.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
Save obj= new Save();
obj.newText.setText("Hello"); //testing to see if this works
/*Save obj = new Save();
TextView savedText = obj.getTextView();
savedText.setText("hello");*/
}
});
}
}
Действие с TextView, которое должно измениться.
public class Save extends AppCompatActivity {
public static TextView newText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_save);
newText = (TextView) findViewById(R.id.savedText);
}
}
Каталог.
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at cs.rice.password_csp.Generate$2.onClick(Generate.java:52)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Я получаю здесь то, что это говорит о том, что эта строка ссылается на нулевой объект.
obj.newText.setText("Hello");
Я не понимаю, почему это так, потому что я почти уверен, что здесь все выглядит правильно, но я думаю, что нет.
Я новичок в этом, поэтому любая помощь будет отличной. Я пробовал решения здесь, здесь и здесь, но все они вызывают у меня одну и ту же проблему.
static
означает, что переменная связана с классом, а не с каждым отдельным членом.static
следует использовать только тогда, когда все экземпляры класса имеют одинаковое значение. В этом случае, делаяView
статической переменной, вы говорите, что все действия имеют одно и то же представление. Это приведет к некоторым нежелательным результатам. - person Code-Apprentice   schedule 28.04.2017