在不同Activity之间传递数据的四种常用方法

在Android中传递数据的方法非常多,本次介绍4中比较常用的数据传递方法:

1.通过Intent传递数据

2.通过静态变量(static)传递数据

3.通过剪贴板(Clipboard)传递数据

4.通过全局对象传递数据

在TransmitDataActivity.java中

package mobile.android.transmit.data; public class TransmitDataActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button1=(Button)findViewById(R.id.button1); Button button2=(Button)findViewById(R.id.button2); Button button3=(Button)findViewById(R.id.button3); Button button4=(Button)findViewById(R.id.button4); button1.setOnClickListener(new ButtonListenner()); button2.setOnClickListener(new ButtonListenner()); button3.setOnClickListener(new ButtonListenner()); button4.setOnClickListener(new ButtonListenner()); } class ButtonListenner implements OnClickListener{ @SuppressLint("NewApi") @Override public void onClick(View view) { Intent intent=null; switch (view.getId()) { case R.id.button1: intent=new Intent(TransmitDataActivity.this,MyActivity1.class); //保存String类型的值 intent.putExtra("intent_string", "通过Intent传递的字符串"); //保存integer类型的值 intent.putExtra("intent_integer", 300); Data data=new Data(); data.id=1000; data.name="Android"; //保存可序列化的对象 intent.putExtra("intent_object", data); //显示用于接收数据的Activity startActivity(intent); break; case R.id.button2: intent=new Intent(); intent.setClass(TransmitDataActivity.this, MyActivity2.class); //下面的代码为MyActivity2中放入三个静态变量赋值 MyActivity2.id=3000; MyActivity2.name="保时捷"; MyActivity2.data=new Data(); MyActivity2.data.id=5555; MyActivity2.name="Android"; startActivity(intent); break; case R.id.button3: intent=new Intent(TransmitDataActivity.this,MyActivity3.class); //获取剪贴板对象(ClipboardManager) ClipboardManager clipboard=(ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); //创建Data对象 Data clipboardData=new Data(); //设置Data对象中字段的值 clipboardData.id=6666; clipboardData.name="通过Clipboard传递的数据"; //创建字节数组输出流对象,用于将Data对象转换为字节流 ByteArrayOutputStream baos=new ByteArrayOutputStream(); //用于保存Data对象生成Base64格式的字符串 String base64Str=""; try { ObjectOutputStream oos=new ObjectOutputStream(baos); //将Data对象写入对象输出流 oos.writeObject(clipboardData); //将字节流进行Base64编码 base64Str=Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); oos.close(); } catch (IOException e) { e.printStackTrace(); } //获取存储文本数据的剪贴板数据对象(ClipData) ClipData clipData=ClipData.newPlainText("data", base64Str); //设置主剪贴板 clipboard.setPrimaryClip(clipData); //显示Myactivity3窗口 startActivity(intent); break; case R.id.button4: //获取MyApp对象 MyApp myApp=(MyApp) getApplicationContext(); myApp.country="美国"; myApp.data.id=1234; myApp.data.name="飞碟"; intent=new Intent(TransmitDataActivity.this,MyActivity4.class); startActivity(intent); break; default: break; } } } }

Data类:这个类是可序列化的,也就是实现了java.io.Serializable接口的类。

package mobile.android.transmit.data; import java.io.Serializable; public class Data implements Serializable{ public int id; public String name; }

在Myactivity1.java中:package mobile.android.transmit.data;

public class MyActivity1 extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.myactivity); TextView textView=(TextView)findViewById(R.id.textview); //获得String类型的值 String intentString=getIntent().getStringExtra("intent_string"); //获得Integer类型的值 int intentInteger=getIntent().getExtras().getInt("intent_integer"); //获得Data类型的值 Data data=(Data) getIntent().getExtras().get("intent_object"); StringBuffer sb=new StringBuffer(); sb.append("Intent_string:"); sb.append(intentString); sb.append("\n"); sb.append("intent_integer:"); sb.append(intentInteger); sb.append("\n"); sb.append("data.id:"); sb.append(data.id); sb.append("\n"); sb.append("data.name:"); sb.append(data.name); sb.append("\n"); //在屏幕上输出传递过来的值 textView.setText(sb.toString()); } }

在Myactivity2.java中:

package mobile.android.transmit.data; public class MyActivity2 extends Activity{ public static String name; public static int id; public static Data data; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.myactivity); TextView textView=(TextView)findViewById(R.id.textview); StringBuffer sb=new StringBuffer(); sb.append("name:"); sb.append(name); sb.append("\n"); sb.append("id:"); sb.append(id); sb.append("\n"); sb.append("data.id:"); sb.append(data.id); sb.append("\n"); sb.append("data.name:"); sb.append(data.name); sb.append("\n"); textView.setText(sb.toString()); } }

在Myactivity3中:

package mobile.android.transmit.data; public class MyActivity3 extends Activity{ @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.myactivity); TextView textView=(TextView)findViewById(R.id.textview); //获取剪贴板对象 ClipboardManager clipboardManager=(ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); //从剪贴板中获取Base64编码字符串 String base64Str=clipboardManager.getPrimaryClip().getItemAt(0).getText().toString(); //将Base64编码字符串编码成字节数组 byte[] buffer=Base64.decode(base64Str, Base64.DEFAULT); ByteArrayInputStream bais=new ByteArrayInputStream(buffer); try { ObjectInputStream ois=new ObjectInputStream(bais); //将字节流还原成Data对象 Data data=(Data) ois.readObject(); //将Base64编码原文和Data对象字段值显示在TextView控件中 textView.setText(base64Str+"\n\ndata.id:"+data.id+"\ndata.name:"+data.name); } catch (Exception e) { e.printStackTrace(); } } }

在Myactivity4.java中:

package mobile.android.transmit.data; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MyActivity4 extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.myactivity); TextView textView=(TextView) findViewById(R.id.textview); MyApp myApp=(MyApp) getApplicationContext(); textView.setText("MyApp.country:"+myApp.country+"\nMyApp.data.id:"+myApp.data.id+"\nMyApp.data.name:"+myApp.data.name); } }

关于在不同Activity之间传递数据的四种常用方法小编就给大家介绍这么多,希望对大家有所帮助!

时间: 2024-10-13 05:36:15

在不同Activity之间传递数据的四种常用方法的相关文章

在不同Activity之间传递数据的四种常用方法_Android

在Android中传递数据的方法非常多,本次介绍4中比较常用的数据传递方法: 1.通过Intent传递数据 2.通过静态变量(static)传递数据 3.通过剪贴板(Clipboard)传递数据 4.通过全局对象传递数据 在TransmitDataActivity.java中 package mobile.android.transmit.data; public class TransmitDataActivity extends Activity { @Override protected

Android 学习之路一:Activity之间传递数据的四种方式

传递数据 新建 Activity 在项目中右键,选择 New,继续选择中下方的 Activity,最后是 Blank Activity. 此时 Android Studio 会为我们自动添加一个对应的布局文件,为布局文件中的 TextView 添加 ID,以便后续使用. 用Intent 发送数据 在主布局文件中新建一个 Button 控件,并在主类中定义它,然后为它设置 Click 的监听事件. Button button; @Override protected void onCreate(B

关于Android Activity之间传递数据的6种方式

使用Inten的putExtra传递 第一个Activity中 //创建意图对象 Intent intent = new Intent(this,TwoActivity.class); //设置传递键值对 intent.putExtra("data",str); //激活意图 startActivity(intent); 第二个Activity中 // 获取意图对象 Intent intent = getIntent(); //获取传递的值 String str = intent.ge

broadcastreceiver-利用广播在activity之间传递数据问题

问题描述 利用广播在activity之间传递数据问题 我想利用广播在activity之间传递数据(不是直接用intent传递bundle),代码如下: MainActivity: public class MainActivity extends Activity{ private Button mButton; @override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceSt

Android 学习之路 1:如何在Activity之间传递数据

传递数据 新建 Activity 在项目中右键,选择 New,继续选择中下方的 Activity,最后是 Blank Activity. 此时 Android Studio 会为我们自动添加一个对应的布局文件,为布局文件中的 TextView 添加 ID,以便后续使用. 用Intent 发送数据 在主布局文件中新建一个 Button 控件,并在主类中定义它,然后为它设置 Click 的监听事件. Button button; @Override protected void onCreate(B

Activity之间传递大数据问题

Android开发人员都知道,Intent适用于在不同的Activity之间传递数据,包括参数.字符串.以及序列化的对象等.但是笔者所做的项目用到了使用Intent 传递Bitmap图片对象,图片的数据量相对来说是比较大的,那么intent能否胜任传递图片的任务呢? 首先很明显bitmap实现了Android中的Parcelable接口,可以序列化.因此理所当然能够通过intent传递,然而图片的大小有没有限制呢? Bitmap extends Objectimplements Parcelab

大叔也说Xamarin~Android篇~Activity之间传递数组

原文:大叔也说Xamarin~Android篇~Activity之间传递数组 我们在开发应用程序时,不可能只使用一个Layout或者一个Activity,比如你个管理系统,要求用户先登陆然后再使用,这时你至少要有两个activity吧,先登陆一个,然后成功后需要跳到别一个Activity,这就遇到了多个Activity之间传递数据的问题,这也是今天我们要说的! 先聊聊Activity 首先一个Activity都会去继承Activity类,这个类里有方法已经替我们实现,我们可以把activity看

menu-【数据在2个activity之间传递】使用Intent连接2个activity,但数据无法在之间传递

问题描述 [数据在2个activity之间传递]使用Intent连接2个activity,但数据无法在之间传递 //Activity_Main 代码 public class Menuer extends Activity { protected static final int REQUEST_CODE = 0; TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(sav

在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)

案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务. 方案一:使用广播+Service 注册BroadcastReceiver 1.在主程序activity中注册一个BroadcastReceiver,用于接收Service发布的广播. @Override protected void onStart() {//重写onStart方法 dataReceiver = new DataReceiver(); IntentFilter