getIntent()不检索先前活动的意图并返回null

时间:2015-12-16 12:22:40

标签: android

我正在尝试在按下选项菜单时在一个活动的字符串ArrayList中发布。但是,当我在下一页尝试getIntent()时,它会返回空值。

选择项目时的选项菜单代码:

public boolean onOptionsItemSelected(MenuItem item) {
  if(item.getItemId()==2){
       ArrayList<String>data1=new ArrayList<>();
       data1.add("Hello");
       data1.add("bye");
       Intent i = new Intent(MainActivity.this,SecondActivity.class);
        i.putExtra("dataList",data1);
       startActivity(i);
   }
    return true;
}

检索数据活动:

public class SecondActivity extends AppCompatActivity {
ListView lListView;
ArrayAdapter<String> adapter;
Intent intent = getIntent();
ArrayList<String> data = intent.getStringArrayListExtra("dataList");


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

6 个答案:

答案 0 :(得分:1)

Intent intent = getIntent();
ArrayList<String> data = intent.getStringArrayListExtra("dataList");

在oncreate

中添加此行

答案 1 :(得分:1)

将此代码移至onCreate方法:

Intent intent = getIntent();
ArrayList<String> data = intent.getStringArrayListExtra("dataList");

在您尝试获取它时,Intent不存在,它将在您的活动的生命周期中稍后传递。这就是你得到null的原因。

答案 2 :(得分:1)

  

检查我在代码中所做的更改。应该调用getIntent()   在里面创造...

public class SecondActivity extends AppCompatActivity {
    ListView lListView;
    ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    //changes
       Intent intent = getIntent();
       ArrayList<String> data =            
       intent.getExtras().getStringArrayListExtra("dataList");
       //changes
       lListView = (ListView)findViewById(R.id.lListView);
      adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
        lListView.setAdapter(adapter);
        }
    }

答案 3 :(得分:0)

首先设置

 i.putStringArrayListExtra("dataList",data1);

然后调用 Oncreate()部分;

 Intent intent = getIntent();
ArrayList<String> data = intent.getStringArrayListExtra("dataList");

最后

public class SecondActivity extends AppCompatActivity {
ListView lListView;
ArrayAdapter<String> adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    Intent intent = getIntent();
    ArrayList<String> data = intent.getStringArrayListExtra("dataList");

    lListView = (ListView)findViewById(R.id.lListView);
    adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
    lListView.setAdapter(adapter);
    }
}

答案 4 :(得分:0)

您应该使用ArrayList在代码中设置// this will only work if jQuery is loaded $('#idOfMyCheckbox').on('change', function() { $.post( '/url/of/my/checkbox/saver', { state: $(this).val() }, function(ret) { alert("The server replied: " + ret.message); } ).fail(function() { alert("something went very wrong"); }); });

答案 5 :(得分:0)

尝试onCreate()中的其他活动:

cout << it->roll << ' ' << it->name << ' ' << it->marks << " is top in the class\n";

ArrayList<String> data = (ArrayList<String>) getIntent().getSerializableExtra("dataList");