android中传递数据的方式有四种:
使用Intent来传递数据;
在Activity之间使用静态变量传递数据;
通剪切板传递数据 ;
Intent中使用全局变量来传递数据;
Intent表示意图,很多时候我们都会利用Android的Intent来在各个Activity之间传递数据,这也是Android比较官方的一种数据传递的方式,今天我主要介绍的就是用intent来传送activity之间的数据。
传送模式:activity与activity之间:(这里只做主要方法的分析)
A(储存数据)-------------B(接收数据)
A(接收数据)-------------B(储存数据)
具体代码分析如下:A(储存数据)-------------B(接收数据)
A:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initComponent();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(IntentDemo.this, Other.class); 得到intent
// 在Intent中传递数据
intent.putExtra("name", "AHuier"); 将数据储存进去
intent.putExtra("age", 22);
intent.putExtra("address", "XiaMen");
// 启动Intent
startActivity(intent);
}
});
}
B:
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
initComponent();
Intent intent = getIntent(); 得到开启自己activity的intent 获取储存的内容(对面储存的是什么类型,就调用什么类型,切记,比如储存的是int类型,就调用 getint类型。)
int age = intent.getIntExtra("age", 0);
String name = intent.getStringExtra("name");
String address = intent.getStringExtra("address");
textView.setText("My age is " + age + "\n" + "My name is " + name + "\n" + "My address "
+ address);
}
具体代码分析如下:A(接收数据)-------------B(储存数据)
A:
public class MainActivity extends Activity
{
private Button mainBtn=null;
private final static int REQUEST_CODE=1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mainBtn=(Button)findViewById(R.id.mainBtn);
mainBtn.setOnClickListener(listener);
}
private OnClickListener listener=new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent=new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
intent.putExtra("str", "Intent Demo");
startActivityForResult(intent, REQUEST_CODE); //次方法必须调用,获取开启activity的结果值。第二个参数是请求码,也可以写成数字。
}
};
@Override //然后直接重写这个方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data) (参数1:请求码,参数2:结果码,参数3:intent)
{
//请求码与结果码的运用?没有下面的if语句的话,我们不知道开启了是拿回哪个activity的结果值,做了个判断
if (requestCode==REQUEST_CODE)
{
if (resultCode==SecondActivity.RESULT_CODE)
{
Bundle bundle=data.getExtras();
String str=bundle.getString("back");
Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
}
}
}
}
B:
public class SecondActivity extends Activity
{
public final static int RESULT_CODE=1;
private TextView secondTxt;
private Button secondBtn;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
String str=bundle.getString("str");
secondTxt=(TextView)findViewById(R.id.secondTxt);
secondTxt.setText(str);
secondBtn=(Button)findViewById(R.id.secondBtn);
secondBtn.setOnClickListener(listener);
}
private OnClickListener listener=new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent=new Intent();
intent.putExtra("back", "Back Data");
setResult(RESULT_CODE, intent);
finish();
}
};
}