Android使用意图传递数据的四种方式

来源:互联网 发布:如何锻炼pc肌肉知乎 编辑:程序博客网 时间:2024/06/14 13:40

1.使用通用方式传递数据

发送:

Intent intent = new Intent(MainActivity.this,OtherActivity.class);//在意图中传递数据intent.putExtra("name", "小明");intent.putExtra("age", 21);intent.putExtra("address", "西安");//启动意图startActivity(intent);

接收:
Intent intent = getIntent();int age = intent.getIntExtra("age", 0);String name = intent.getStringExtra("name");String address = intent.getStringExtra("address");
2.使用全局变量方式传递数据

设置一个Myapp.java

public class MyApp extends Application {public String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public MyApp() {// TODO Auto-generated constructor stub}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();setName("张三");}

发送:

public void onClick(View v) {// TODO Auto-generated method stubmyApp = (MyApp)getApplication();myApp.setName("jack");Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);

接收:

myApp = (MyApp)getApplication();textView.setText("appName-->" + myApp.getName());
Manifest.xml里

 <application        android:name=".MyApp"        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.example.android_app.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".OtherActivity"></activity>    </application>
3.使用剪贴板方式传递

发送:

public void onClick(View v) {// TODO Auto-generated method stub//从android系统中调用剪切板的方法ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);String name = "jack";clipboardManager.setText(name);Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);

接收:

textView = (TextView)this.findViewById(R.id.msg);ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);String msg = clipboardManager.getText().toString();
4.使用剪贴板传递复杂数据

声明一个MyData.java类实现Serializable接口保证其为可序列化的

public class MyData implements Serializable {private static final long serialVersionUID = 1L;private String name;private int age;public MyData() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public MyData(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "MyData [name=" + name + ", age=" + age + "]";}}

发送端:

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button)this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@SuppressWarnings("deprecation")@SuppressLint("NewApi")@Overridepublic void onClick(View v) {MyData myData = new MyData("xiaoming",21);ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();String base64String = "";try{ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);objectOutputStream.writeObject(myData);base64String = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);objectOutputStream.close();}catch(Exception e){}ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);clipboardManager.setText(base64String);Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);}});

接收端:

public class OtherActivity extends Activity {private TextView textView;public OtherActivity() {// TODO Auto-generated constructor stub}@SuppressLint("NewApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);textView = (TextView)this.findViewById(R.id.msg);ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);@SuppressWarnings("deprecation")String msg = clipboardManager.getText().toString();//将从剪切板中取回的数据还原byte[] base64_byte = Base64.decode(msg, Base64.DEFAULT);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64_byte);try{ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);MyData myData = (MyData)objectInputStream.readObject();textView.setText(myData.toString());}catch(Exception e){}}}

5.使用静态变量传递数据

接收端:

public class OtherActivity extends Activity {private TextView textView;public static String name;public static int age;public OtherActivity() {// TODO Auto-generated constructor stub}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.other);textView = (TextView)this.findViewById(R.id.msg);textView.setText("name-->>"+ name + "\n" + "age-->>" + age);}}

发送端:

public void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(MainActivity.this,OtherActivity.class);OtherActivity.age = 21;OtherActivity.name = "xiaoming";startActivity(intent);}});

6.使用意图传递值返回结果

发送:

package com.example.android_intent_forresult;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity {private Button button;private final static int REQUESTCODE = 1;private EditText one,two,result;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button)this.findViewById(R.id.button);one = (EditText)this.findViewById(R.id.one);two = (EditText)this.findViewById(R.id.two);result = (EditText)this.findViewById(R.id.result);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int a = Integer.parseInt(one.getText().toString());int b = Integer.parseInt(two.getText().toString());Intent intent = new Intent(MainActivity.this,OtherActivity.class);intent.putExtra("a",a);intent.putExtra("b", b);startActivityForResult(intent, REQUESTCODE);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if(resultCode == 2){if(requestCode == REQUESTCODE){int three = data.getIntExtra("three", 0);result.setText(String.valueOf(three));} }}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}


接收:

package com.example.android_intent_forresult;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class OtherActivity extends Activity {private Button button;private TextView textView;private EditText editText;public OtherActivity() {}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.other);button = (Button)this.findViewById(R.id.button2);textView = (TextView)this.findViewById(R.id.msg);editText = (EditText)this.findViewById(R.id.three);Intent intent = getIntent();int a = intent.getIntExtra("a", 0);int b = intent.getIntExtra("b", 0);textView.setText(a + "+" + b + "=" + "?");button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {Intent intent = new Intent();int three = Integer.parseInt(editText.getText().toString());intent.putExtra("three", three);//通过intent对象返回结果,必须调用setResult方法setResult(2,intent);finish();//结束Activity的生命周期}});}}



原创粉丝点击