Великая java требует от меня, что бы переменные name, number, data
были final
, но если их сделать final
, то текст с edittext
еще не будет получен и я схвачу NullPointerException, как исправлять? Код:
String name = editName.getText().toString();
String number = editNumber.getText().toString();
String data =editData.getText().toString();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ch.insert(name,number,data); //Добавляем новую запись
Логи:
03-11 23:09:19.522 6073-6073/com.example.user.phonenumbers E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.phonenumbers, PID: 6073
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.phonenumbers/com.example.user.phonenumbers.Main2Activity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.FloatingActionButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2702)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2768)
at android.app.ActivityThread.access$900(ActivityThread.java:190)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1590)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5927)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.FloatingActionButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at com.example.user.phonenumbers.Main2Activity.onCreate(Main2Activity.java:24)
at android.app.Activity.performCreate(Activity.java:6362)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2655)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2768)
at android.app.ActivityThread.access$900(ActivityThread.java:190)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1590)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5927)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:819)
Полный код активности:
public class Main2Activity extends AppCompatActivity {
FloatingActionButton btn;
EditText editName,editNumber,editData;
ContactsHelper ch;
@Override
protected void onCreate(Bundle savedInstanceState) {
btn = (FloatingActionButton) findViewById(R.id.floatbtn2);
editName = (EditText) findViewById(R.id.nameEdit);
editNumber = (EditText) findViewById(R.id.numberEdit);
editData = (EditText) findViewById(R.id.dataEdit);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = editName.getText().toString();
String number = editNumber.getText().toString();
String data =editData.getText().toString();
//Проверяем введённые данные
if(checkIsValid(name, number, data))
ch.insert(name,number,data); //Добавляем новую запись
Intent i = new Intent(Main2Activity.this,MainActivity.class);
startActivity(i);
}
});
}
boolean checkIsValid(String name,String number, String data){
if(name!=null&&number!=null&&data!=null){
return true;
}else{
return false;
}
}
}
Код ContactsHelper:
public class ContactsHelper {
SQLiteDatabase db; // объект для манипулирования данными в базе.
ContactsHelper(Context context) {
DBHelper dbHelper = new DBHelper(context); //инициализируем нашего помошника базы данных
db = dbHelper.getWritableDatabase(); // получаем доступ к базе с возможностью записи/чтения
}
//метод для того, чтобы положить данные в базу
long insert(String name, String phone, String birthday) {
ContentValues cv = new ContentValues();// хранилище с принципом ключ-значени
cv.put(DBHelper.COLUMN_NAME, name);
cv.put(DBHelper.COLUMN_PHONE, phone);
cv.put(DBHelper.COLUMN_BIRTHDAY, birthday);
return db.insert(TABLE_NAME, null, cv);// метод insert возвращает id, помещенного объекта в таблицу.
// указали имя таблицы и хранилище данных
}
//метод для получения всех записей из таблицы
ArrayList<Contact> getAll() {
Cursor mCursor = db.query(TABLE_NAME, null, null, null, null, null,
null);
ArrayList<Contact> arr = new ArrayList<>();
mCursor.moveToFirst();
if (!mCursor.isAfterLast()) {
//дедай пока записи есть в таблице
do {
long id = mCursor.getLong(DBHelper.NUM_COLUMN_ID);
String name = mCursor.getString(DBHelper.NUM_COLUMN_NAME);
String phone = mCursor.getString(DBHelper.NUM_COLUMN_PHONE);
String birthday = mCursor.getString(DBHelper.NUM_COLUMN_BIRTHDAY);
// получем значения соотвествующих полей и формируем объект, добавив его в коллекцию.
arr.add(new Contact(id, name, phone, birthday));
} while (mCursor.moveToNext());
}
db.close(); // закрыли транзакцию
return arr; // вернули коллекцию
}
Попробуйте так:
public class Main2Activity extends AppCompatActivity {
FloatingActionButton btn;
EditText editName,editNumber,editData;
ContactsHelper ch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
btn = (FloatingActionButton) findViewById(R.id.floatbtn2);
editName = (EditText) findViewById(R.id.nameEdit);
editNumber = (EditText) findViewById(R.id.numberEdit);
editData = (EditText) findViewById(R.id.dataEdit);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = editName.getText().toString();
String number = editNumber.getText().toString();
String data =editData.getText().toString();
//Проверяем введённые данные
if(checkIsValid(name, number, data))
ch.insert(name,number,data); //Добавляем новую запись
Intent i = new Intent(Main2Activity.this,MainActivity.class);
startActivity(i);
}
});
}
boolean checkIsValid(String name,String number, String data){
if(!name.isEmpty() && !number.isEmpty() && !data.isEmpty()){
return true;
}else{
return false;
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как извлечь в переменную типа int число 2 из JSON-ответа на языке JAVA ? (вместо 2 может быть любое многозначное число)
Мне нужно сделать авторизацию по номеру телефонаВ принципе с задачей я уже справился следующим образом: