android - onActivityResult 没有从 Intent 中获取字符串

标签 android android-intent

我的 Android 应用程序需要一些帮助。我有两个 Activity ,第一个是使用 startActivityForResult() 启动第二个 Activity 。当第二个关闭时,它会按原样发送 Intent ,但是当我想从 onActivityResult() 访问额外内容时,我得到一个 null 而不是我输入的内容。 我也尝试过将 bundle 与

一起使用
Bundle b = getIntent().getExtras();
b.getString(AddTable.EXTRA_NAME);

但它导致了 RuntimeException 和传递结果失败。

这是我的代码:

public class RunnerApp extends Activity {

    private ListView listView;
    private static ArrayList<String> values = new ArrayList<String>();
    private ArrayAdapter<String> adapter;
    private Intent newTable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_runner_app);
        listView = (ListView) findViewById(R.id.mylist);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);
        listView.setAdapter(adapter);
    }

    public void addTable(View v){
        newTable = new Intent(this, AddTable.class);
        startActivityForResult(newTable, 1);
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1 && resultCode == Activity.RESULT_OK && data != null){
        data = getIntent();
        Log.d("add", "got intent");
        String newName = data.getStringExtra(AddTable.EXTRA_NAME);
            Log.d("add", "string " + newName); //always prints string null
            values.add(newName);
            Log.d("add", "added to list");
        }
    }

    @Override
    public void onResume(){
        super.onResume();
        setContentView(R.layout.activity_runner_app);
        adapter.notifyDataSetChanged();
    }
}

第二个 Activity 由 startActivityForResult() 启动

public class AddTable extends Activity {

    public final static String EXTRA_NAME = "com.example.runnerapp.NAME";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_table);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_add_table, menu);
        return true;
    }

    public void addThisTable(View v) {
        Intent addTable = new Intent(this, RunnerApp.class);
        EditText editText = (EditText) findViewById(R.id.addTableField);
        String name = editText.getText().toString();
        addTable.putExtra(EXTRA_NAME, name);
        Log.d("intenyt", name);
        setResult(Activity.RESULT_OK, addTable);
        this.finish();
    }

}

最佳答案

在您的第一个 Activity 中,您的代码读取

data = getIntent();

但是你想要的实际数据在

data.getData()

关于android - onActivityResult 没有从 Intent 中获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388675/

相关文章:

安卓录音机api

android - Gradle语法困惑

android - 从特定日期/时间后捕获的 android 库中删除图像

java - Android 多个快捷键

android - 执行相机 Intent 时 Activity 被杀死

java - Android/Java - 以天为单位的日期差异

android - 打开下载的 PDF 文件

android - 即使提供了通知 ID,也不会在单击操作按钮时删除通知

Android:应用程序启动的回调

Android:MonoDroid:布局问题,将 java 应用程序移植到 monodroid 应用程序时