Android 从另一个班级获得额外的东西
我有Act_01(其中我放置值)和Act_02(其中我获取值),但在一个Extras类中声明了这些方法,从Act_02获取值返回空值: Act_01:(我想将值名称传递给Act_02) Act_02:(我想从Act_01接收值名,但应用程序崩溃,值为空) Extras:(我定义了放置和获取Extras的方法)Android 从另一个班级获得额外的东西,android,class,android-activity,Android,Class,Android Activity,我有Act_01(其中我放置值)和Act_02(其中我获取值),但在一个Extras类中声明了这些方法,从Act_02获取值返回空值: Act_01:(我想将值名称传递给Act_02) Act_02:(我想从Act_01接收值名,但应用程序崩溃,值为空) Extras:(我定义了放置和获取Extras的方法) 编辑:我不想在活动之间直接传递和获取数据,我想使用第三类(Extras.java)因为我有太多的活动,它们之间有太多的值,我想在Extras中对它们进行全局定义,这样我的所有其他活动都可以
编辑:我不想在活动之间直接传递和获取数据,我想使用第三类(Extras.java)因为我有太多的活动,它们之间有太多的值,我想在Extras中对它们进行全局定义,这样我的所有其他活动都可以调用一个方法,而不是在我的活动中获取和放置太多的值。在这两个活动中,您正在创建Extras类的新实例,这意味着它们不具有相同的值,您可以执行此操作以将数据从A传输到B
public class Act_01 extends Activity {
Button btn1;
Intent intent;
String str_Name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_01);
str_Name = "Buck";
btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
intent = new Intent(Act_01.this, Act_02.class);
intent.putExtra("data", str_Name)
startActivity(intent);
}
});
}
}
接收这样的数据
public class Act_02 extends Activity {
String str_Name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_02);
// cc_Extras = new Extras();
if(getIntent() != null)
{
if (getIntent().getStringExtra("data") != null) {
Toast.makeText(Act_02.this, "Name: "+getIntent.getStringExtra("data"), Toast.LENGTH_SHORT).show();
}
}
}
}
你也应该考虑使用活动上下文而不是应用上下文
在这两个活动中,你正在创建一个新的Excel类实例,意味着它们不具有相同的值,你可以这样做来把数据从A传递到Bpublic class Act_01 extends Activity {
Button btn1;
Intent intent;
String str_Name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_01);
str_Name = "Buck";
btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
intent = new Intent(Act_01.this, Act_02.class);
intent.putExtra("data", str_Name)
startActivity(intent);
}
});
}
}
接收这样的数据
public class Act_02 extends Activity {
String str_Name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_02);
// cc_Extras = new Extras();
if(getIntent() != null)
{
if (getIntent().getStringExtra("data") != null) {
Toast.makeText(Act_02.this, "Name: "+getIntent.getStringExtra("data"), Toast.LENGTH_SHORT).show();
}
}
}
}
你也应该考虑使用活动上下文而不是应用上下文
你的应用程序崩溃不是空值,而是空指针<强>引用< /强>,因为你创建了<代码>新的活动< /代码>手动cc_Extras = new Extras();
然后对其调用生命周期方法
cc_Extras.getExtras()
它调用了getIntent()
,但是这个Intent从来不是由Android框架设置的,而且cc_Extras.getExtras()
在第二个活动中不会有任何您想要的数据,因为它是在那里创建的,而不是从第一个活动创建的
简单地说,你永远不应该做一个新的活动,你的额外课程一开始就不需要是一个活动(也没有提供太多的好处)
只需使用第一个活动提供的Intent对象来启动第二个活动,并像正常情况一样获得额外功能。不要使代码过于复杂。关于问题的标题,
Intent
和Bundle
已经是安卓为您设计的传输数据的“另一类” 由于您手动创建了一个新活动,您的应用程序崩溃的原因不是空值,而是空指针引用
cc_Extras = new Extras();
然后对其调用生命周期方法
cc_Extras.getExtras()
它调用了getIntent()
,但是这个Intent从来不是由Android框架设置的,而且cc_Extras.getExtras()
在第二个活动中不会有任何您想要的数据,因为它是在那里创建的,而不是从第一个活动创建的
简单地说,你永远不应该做一个新的活动,你的额外课程一开始就不需要是一个活动(也没有提供太多的好处)
只需使用第一个活动提供的Intent对象来启动第二个活动,并像正常情况一样获得额外功能。不要使代码过于复杂。关于问题的标题,Intent
和Bundle
已经是安卓为您设计的传输数据的“另一类” 好的!下面是我想建议你改正的几件事
需要在代码中进行更改。
您没有向“意图”对象分配任何内容,并且您已经传递了一个意图,但没有向其分配任何内容
您的实例cc_Extra在活动1中没有执行任何操作。您可能希望在类的构造函数中传递“intent”对象,如cc_Extras=newextras(intent)代码>并在Extras类中执行以下操作-Intent;
额外费用(意向一)
{
这个.intent=i;
}
在activity2中,您正在创建Extras()的新实例。因此,根据您的代码,默认情况下它将为NULL。如果您已经完成了上一步的更改,那么可以通过执行cc_Extras(getIntent())创建新实例代码>
代码中的更正
1) 在Extras类中,使用getExtras()方法代替str=getIntent()
使用str=intent.getExtras.getString()
2) 在activity2中,您没有为字符串str_名称分配任何内容,因此需要返回在getExtras()方法中获得的字符串。可以通过将返回类型更改为String来实现。下面是示例代码
public String getExtras()
{
str_Name=intent.getExtras().getString("KEY_Name");
//OR
//str_Name=intent.getStringExtra("KEY_Name");
return str_Name;
}
3) 通过执行此操作,您需要在activity2中通过执行捕获此字符串`
if(getIntent() != null && getIntent().getExtras() != null)
{
str_Name=cc_Extras.getExtras();
}`
4) 另一件事是你必须创造这样的意图-
Intent intent=new Intent(currentActivityName.this,anotherActivity2.class);
//then use the intent object
编辑-您的代码最终必须是这样的…
行动1
行动02
附加班
public class Extras { //remove "extends Activity" because it is a class not a activity
String str_Name;
Intent intent;
Extras(Intent i)
{
this.intent=i;
}
public void putExtras(String str) {
// TODO Auto-generated method stub
str_Name=str;
intent.putExtra("KEY_Name", str_Name);
}
public String getExtras() {
// TODO Auto-generated method stub
str_Name = intent.getExtras().getString("KEY_Name");
return str_Name;
}
}
上面的代码只适用于字符串。如果需要,可以扩展该功能
我希望这一定能让你的代码正常工作 好的!下面是我想建议你改正的几件事
需要在代码中进行更改。
您没有向“意图”对象分配任何内容,并且您已经传递了一个意图,但没有向其分配任何内容
您的实例cc_Extra在活动1中没有执行任何操作。您可能希望在类的构造函数中传递“intent”对象,如cc_Extras=newextras(intent)代码>并在Extras类中执行以下操作-Intent;
额外费用(意向一)
{
这个.intent=i;
}
在activity2中,您正在创建Extras()的新实例。因此,根据您的代码,默认情况下它将为NULL。如果您已经完成了上一步的更改,那么可以通过执行cc_Extras(getIntent())创建新实例代码>
代码中的更正
1) 在Extras类中,使用getExtras()方法代替str=getIntent()
使用str=intent.getExtras.getString()
2) 在activity2中,您没有为字符串st分配任何内容
public class Extras { //remove "extends Activity" because it is a class not a activity
String str_Name;
Intent intent;
Extras(Intent i)
{
this.intent=i;
}
public void putExtras(String str) {
// TODO Auto-generated method stub
str_Name=str;
intent.putExtra("KEY_Name", str_Name);
}
public String getExtras() {
// TODO Auto-generated method stub
str_Name = intent.getExtras().getString("KEY_Name");
return str_Name;
}
}