2 sueis sueis 于 2013.07.25 21:18 提问

intent.getExtras();报空指针

错误的重点是:**把最后Activity接收Activity1传来的数据代码,放在一个按钮中就完全正确,但是要是放在onCreate中,就崩溃报空指针**
程序先是Activity跳到Activity1,然后从Activity1中获取字符串传递回Activity中。
下面是Activity跳转到Activity1的代码:
Intent intent=new Intent();
intent.setClass(MainActivity.this,MainActivity1.class);
startActivity(intent);
MainActivity.this.finish();
下面是Activity1向Activity传递数据的代码:
String orgin = orginEdit.getText().toString();
String destination = destinationEdit.getText().toString();

Intent intent=new Intent();
Bundle orgin1 = new Bundle();
Bundle destination1 = new Bundle();
orgin1.putString("orgin1", orgin);
destination1.putString("destination1",destination);
intent.putExtras(orgin1);
intent.putExtras(destination1);
startActivity(intent);
下面是Activity接收数据的代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
Bundle og = intent.getExtras();
Bundle de = intent.getExtras();
String orgin1 = og.getString("orgin1");//???????????????????????????????????????????????????
String destination1 = de.getString("destination1");
将这段接收数据的代码放在一个按钮中就没有任何问题,可以正常执行,但是放在onCreate中,getExtras就报空指针
Manifest文件如下:
android:name="com.example.citysearch_duty.MainActivity"
android:label="@string/app_name" >

            <category android:name="android.`intent`.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.example.citysearch_duty.MainActivity1"
         android:label="@string/title_activity_main_activity1" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

第一次提问,不懂格式,多多谅解~~请各位帮忙解答一下,小女子在此拜谢~~

3个回答

shaojie519
shaojie519   2013.07.25 22:05

请使用一个Bundle
Bundle bundle= new Bundle();
bundle.putString("orgin1", orgin);
bundle.putString("destination1",destination);
取值的时候就只需要取一次getExtras().

shaojie519
shaojie519 onCreate里不行的话,在onNewIntent()方法里试试。
大约 4 年之前 回复
sueis
sueis 嗯,改成一个Bundle了,不过问题没有解决,同样的一段接收代码,放在按钮中,就可以接受上一个Activity传来的数据,直接放在onCreate中就不行,这是怎么回事?
大约 4 年之前 回复
lori_xj
lori_xj   2013.07.25 22:45

写了一个例子可以看看
活动的代码:
public class TestBundle extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

public boolean onTouchEvent(MotionEvent event) {  
    Intent intent = new Intent();  
    intent.setClass(TestBundle.this, Target.class);  
    Bundle mBundle = new Bundle();  
    mBundle.putString("Data", "我是上一个activity发送的数据");//压入数据  
    intent.putExtras(mBundle);  
    startActivity(intent);  
    finish();  
    return super.onTouchEvent(event);  
}  

}

跳转到的代码:
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Bundle bundle = getIntent().getExtras();

String data=bundle.getString("Data");//读出数据

setTitle(data);

}

lori_xj
lori_xj 你先打个断点,看一看在哪里出错!
大约 4 年之前 回复
sueis
sueis 就是跳转到的代码出现问题,把代码放在一个开关按钮中,就运行正常接收数据,但是直接放在onCreate中,就报空指针...
大约 4 年之前 回复
u012844574
u012844574   2015.03.29 16:10

我遇到了 intent2=new Intent();//因为没有实例化 所以会造成bundle 空指针

    intent2.putExtras(mBundle2);
Csdn user default icon
上传中...
上传图片
插入图片