[英]Multiple Activities, launching and passing data
I am attempting to create a list of users in an android app. 我正在尝试在android应用中创建用户列表。 The list is on the MainActivity, with a button which redirects to AddMember.
该列表位于MainActivity上,带有一个重定向到AddMember的按钮。 AddMember will take input for one member.
AddMember将接受一个成员的输入。 I am trying to pass the information back to MainActivity, however it fails before I even get to the AddMemberActivity, when testing.
我正在尝试将信息传递回MainActivity,但是在测试时,它甚至无法到达AddMemberActivity。 It stops after the button click on the MainActivity.
单击MainActivity后,它停止。
The error message is: 错误消息是:
java.lang.NullPointerException: Attempt to invoke virtual method 'char java.lang.String.charAt(int)' on a null object reference at attendance.Trie.get(Trie.java:117) at attendance.Trie.get(Trie.java:113) at attendance.MainActivity$1.onClick(MainActivity.java:49)
java.lang.NullPointerException:尝试在出席者上的null对象引用上调用虚拟方法'char java.lang.String.charAt(int)'。出席者上的Trie.get(Trie.java:117) .java:113)at.attribute.MainActivity $ 1.onClick(MainActivity.java:49)
line 49 is 第49行是
if (trie.get(name) != null) {
如果(trie.get(name)!= null){
public class MainActivity extends AppCompatActivity {
private Button button;
private ListView list;
private Trie trie;
private ArrayAdapter<String> adapter;
private int count = 0;
private static final int REQUEST_CODE = 100;
private String name;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE) {
if(resultCode == RESULT_OK) {
name = data.getStringExtra("name");
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.addBtn);
list = (ListView) findViewById(R.id.memberList);
trie = new Trie();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), AddMember.class);
startActivityForResult(intent, REQUEST_CODE);
adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.content_list_items,R.id.list_content, trie.traverse());
list.setAdapter(adapter);
//check that member was added
if (trie.get(name) != null) {
// <- look for item!
//made an alert to show member already exists
} else {
trie.put(name.toLowerCase(), count++);
adapter.add(name);
}
adapter.notifyDataSetChanged();
}
});
}
} }
public class AddMember extends AppCompatActivity {
//Array of options --> ArrayAdapter --> ListView
//ListView :{views, items.xml}
private static final int REQUEST_CODE = 100;
private Button button;
private EditText name;
private EditText phone;
private EditText email;
private ArrayAdapter<Member> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_upload_member);
button = (Button) findViewById(R.id.uploadMember);
name = (EditText) findViewById(R.id.edit_name);
//add member button
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("name", name.getText());
setResult(RESULT_OK, intent);
finish();
}
});
}
} }
It is clear from crash log that you are attempting to get character from null string . 从崩溃日志中可以明显看出,您正在尝试从null字符串获取字符。
java.lang.String.charAt(int)' on a null object reference at attendance.Trie.get(Trie.java:117)
Reason : You are passing null value in get method. 原因:您在get方法中传递了空值。 You never assign the
name string
and by default it is assigned with null. 您永远不会分配
name string
,默认情况下,它会分配为null。 And you pass it with trie.get(name)
. 然后将其传递给
trie.get(name)
。
Check your get method of Trie class and put a check of null. 检查您的Trie类的get方法,并检查是否为null。 If name is not null then get the character from string otherwise return null.
如果name不为null,则从字符串中获取字符,否则返回null。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE) {
if(resultCode == RESULT_OK) {
name = data.getStringExtra("name");
if(adapter == null){
adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.content_list_items,R.id.list_content, trie.traverse());
list.setAdapter(adapter);
}
//check that member was added
if (trie.get(name) != null) {
// <- look for item!
//made an alert to show member already exists
} else {
trie.put(name.toLowerCase(), count++);
adapter.add(name);
}
adapter.notifyDataSetChanged();
}
}
}
Remove adapter code from onClick method 从onClick方法中删除适配器代码
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), AddMember.class);
startActivityForResult(intent, REQUEST_CODE);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.