【发布时间】:2016-03-31 09:34:26
【问题描述】:
我基本上是在尝试从另一个活动中获取信息。因此,我需要调用该活动。我用;
Adduser adduser = new AddUser();
但是当我添加它时,应用程序一直强制关闭?有什么想法吗?
主活动;
public class MainActivity extends AppCompatActivity{
//AddUser adduser = new AddUser(); // HERE
// private Realm realm;
// private RealmConfiguration realmConfig;
Button btnadd;
ListView listuser;
ArrayList<String> list = new ArrayList<String>();
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
setContentView(R.layout.activity_main);
// RealmConfiguration config = new RealmConfiguration.Builder(this).build();
// Realm.setDefaultConfiguration(config);
//getNames();
//Add User Button
btnadd = (Button) findViewById(R.id.btnAdd);
listuser = (ListView) findViewById(R.id.listUser);
// adduser.txtName = (EditText) findViewById(R.id.txtName);
adapter =new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
listuser.setAdapter(adapter);
//Button Event
btnadd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v == btnadd) {
Intent addUser = new Intent(getApplicationContext(), AddUser.class);
startActivityForResult(addUser,1);
}
}
});
}
/*void getNames()
{
list.add(adduser.txtName.getText().toString());
}*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
adapter.add(data.getStringExtra("name"));
adapter.notifyDataSetChanged();
}
}
}
添加用户:
public class AddUser extends AppCompatActivity {
Button btnback, btnsave;
EditText txtName, txtEmail, txtPhone, txtAddress;
String n1;
int no1;
Realm realm1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.adduser);
// Realm realm = Realm.getInstance(this);
//EditText
txtName=(EditText)findViewById(R.id.txtName);
txtEmail=(EditText)findViewById(R.id.txtEmail);
txtPhone=(EditText)findViewById(R.id.txtPhone);
txtAddress=(EditText)findViewById(R.id.txtAddress);
//Button
btnback =(Button) findViewById(R.id.btnBack);
btnsave = (Button)findViewById(R.id.btnSave);
//Button Event
btnback.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v == btnback){
Intent main = new Intent(getApplicationContext(), MainActivity.class);
startActivity(main);
}
}
});
btnsave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v == btnsave) {
Intent result = new Intent();
result.putExtra("name",txtName.getText().toString());
setResult(RESULT_OK, result);
Log.v("Name", txtName.getText().toString());
Log.v("Email", txtEmail.getText().toString());
Log.v("Phone", txtPhone.getText().toString());
Log.v("Address", txtAddress.getText().toString());
//main.list.add(txtName.getText().toString());
//UPDATE
/*realm1.beginTransaction();
//Saves the input data
User user = realm1.createObject(User.class);
user.setName(txtName.getText().toString());
user.setAddress(txtAddress.getText().toString());
user.setEmail(txtEmail.getText().toString());
n1 = txtPhone.getText().toString();
no1 = Integer.parseInt(n1);
//COMMIT
realm1.commitTransaction();
*/
Toast.makeText(AddUser.this, "User has been added.", Toast.LENGTH_LONG).show();
//Start Activity
Intent save = new Intent(getApplicationContext(), MainActivity.class);
startActivity(save);
}
}
});
}
}
日志:
03-31 09:38:26.030 2831-2831/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.scott.addressbook, PID: 2831
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.scott.addressbook/com.example.scott.addressbook.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
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.scott.addressbook.MainActivity.getNames(MainActivity.java:51)
at com.example.scott.addressbook.MainActivity.onCreate(MainActivity.java:30)
at android.app.Activity.performCreate(Activity.java:5937)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-31 09:38:26.060 941-941/? E/EGL_emulation: tid 941: eglCreateSyncKHR(1237): error 0x3004 (EGL_BAD_ATTRIBUTE)
我注意到了这一点:
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.text.Editable android.widget.EditText.getText()'
空对象?
我搜索了谷歌,每个人都说这就是这样做的方法?对一些简单的事情有点困惑,哈哈。提前致谢!
【问题讨论】:
-
你能发布你的 logcat 输出,特别是崩溃的堆栈跟踪吗?
-
现在肯定会得到日志——我基本上是在制作一个“地址簿”,我想显示用户的输入(他们的名字),然后在列表视图中显示它。 AddUser 是允许用户输入其姓名的类。
-
可能是由于 'getNames()' 方法中的这行代码 'adduser.txtName.getText()' 导致的错误。你在某处初始化了“adduser.txtName”吗?
-
@KapilRajput 也许......如果我在 'getNames' 方法中添加 'List.add("test") 它适用于列表视图,但我试图显示用户的输入,如果这可以理解吗?所以我试图从“AddUser”类中获取它,而 txtName 是 .xml 上输入文本的名称,用户可以在其中输入他们的名字。这就是为什么我认为 .txtName.getText().toString();会抓取我所追求的数据。
-
看来
AddUser是Activity。不建议手动实例化Activity。