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

时间:2016-05-08 04:02:29

标签: android android-activity

我正在尝试在Android应用中创建用户列表。该列表位于MainActivity上,其中包含一个重定向到AddMember的按钮。 AddMember将为一个成员提供输入。我正在尝试将信息传递回MainActivity,但是在测试之前我甚至无法访问AddMemberActivity。按钮单击MainActivity后停止。

Trie implementation

错误消息是:

  

java.lang.NullPointerException:尝试调用虚方法' char java.lang.String.charAt(int)'在null对象引用上                                                        at attendance.Trie.get(Trie.java:117)                                                        at attendance.Trie.get(Trie.java:113)                                                        at attendance.MainActivity $ 1.onClick(MainActivity.java:49)

第49行是

  

if(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();
        }
    });
}

}

1 个答案:

答案 0 :(得分:0)

从崩溃日志中可以清楚地看到,您正试图从空字符串中获取字符。

java.lang.String.charAt(int)' on a null object reference at attendance.Trie.get(Trie.java:117)

原因:您在get方法中传递null值。您永远不会分配name string,默认情况下会为其指定null。然后你用trie.get(name)传递它。

检查Trie类的get方法并检查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();

        }
    }
}

从onClick方法中删除适配器代码

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), AddMember.class);
            startActivityForResult(intent, REQUEST_CODE);

    });