简体   繁体   English

多个活动,启动和传递数据

[英]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后,它停止。

Trie implementation 尝试执行

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM