Android百日程序:Intent传递数据

上一遍是回传数据,当热Activity之间是可以利用Intent很方便地传递很多数据的。

本章就两个Activity之间传递String和Int数据。

1 主要界面:

2 点击按钮之后,就进入第二个activity

这个时候会利用Toast机制显示第一个activity传递什么String和Int给第二个activity。

3 然后点击“return to main activity”,回到第一个activity

同样会显示回传的信息

这样可以在activity之间来回传递需要的信息。

新建项目;

1 首先设计主界面,代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.intenttest.MainActivity" >

    <Button
        android:id="@+id/seconde_activity_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/activate_secondary"
        android:onClick="onClick" />

</LinearLayout>

就是构造一个LinearLayout,hold住一个Button按钮,android:onClick="onClick"表示这个按键响应的函数名为"onClick",在逻辑代码中定义好这个函数就可以了,如果没有定义这个函数,那么程序就会崩溃的。

2 构建第二个activity的界面,代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/txt_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/secondary_activity" />

    <Button
        android:id="@+id/btn_OK"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="@string/return_to_main_activity" />

</LinearLayout>

构建一个文本和按钮

3 第一个activity的代码:

package com.example.intenttest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {
	/*
	 * An integer value that identifies an activity you are calling. When an
	 * Activity returns a value, you must have a way to identify it If the
	 * request code is set to -1, then calling it using the
	 * startActivityForResult() method is equivalent to calling it using the
	 * startActivity() method. That is, no result will be returned.
	 */
	int requestCode = 1;

	public static <T> boolean equ(T t1, T t2) {
		return t1 == t2;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void onClick(View view) {
		Intent i = new Intent("su.bill.intenttest.SecondaryActivity");
		i.putExtra(SecondaryActivity.extraStr, "Give you a string");
		i.putExtra(SecondaryActivity.extraInt, 15);

		Bundle extras = new Bundle();
		extras.putString(SecondaryActivity.extraStr2, "String in data");
		extras.putInt(SecondaryActivity.extraInt2, 22);

		i.putExtras(extras);

		startActivityForResult(i, requestCode);
	}

	@Override
	public void onActivityResult(int reqCode, int resCode, Intent data) {
		if (equ(reqCode, requestCode) && equ(resCode, RESULT_OK)) {
			Toast.makeText(this,
					Integer.toString(data.getIntExtra(SecondaryActivity.extraInt3, 0)),
					Toast.LENGTH_SHORT).show();

			Toast.makeText(this,
					data.getDataString(),
					Toast.LENGTH_SHORT).show();
		}
	}

	@Override
	public 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;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

和前一章的代码差不多,这里主要学习的函数是:

1) 让Intent带上String数据:

i.putExtra(SecondaryActivity.extraStr, "Give you a string");

2) 让Intent带上Int数据

i.putExtra(SecondaryActivity.extraInt, 15);

3)还可以使用Bundle数据结构,直接带上String和Int数据:

Bundle extras = new Bundle();

extras.putString(SecondaryActivity.extraStr2, "String in data");

extras.putInt(SecondaryActivity.extraInt2, 22);

i.putExtras(extras);

回传调用的函数onActivityResult还是和前一章一样。使用了Toast显示多个回传的数据。

4 然后是第二个activity的逻辑代码:

package com.example.intenttest;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class SecondaryActivity extends Activity {
	public static String extraStr = "extra_string";
	public static String extraInt = "extra_int";
	public static String extraStr2 = "extra_string_2";
	public static String extraInt2 = "extra_int_2";
	public static String extraInt3 = "extra_int_3";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.secondary_activity);

		Toast.makeText(this, getIntent().getStringExtra(extraStr),
				Toast.LENGTH_SHORT).show();
		Toast.makeText(this, String.valueOf(getIntent().getIntExtra(extraInt, 0)),
				Toast.LENGTH_SHORT).show();

		Bundle bundle = getIntent().getExtras();
		Toast.makeText(this, bundle.getString(extraStr2), Toast.LENGTH_SHORT)
				.show();
		Toast.makeText(this, Integer.toString(bundle.getInt(extraInt2)),
				Toast.LENGTH_SHORT).show();
	}

	public void onClick(View v) {
		Intent i = new Intent();

		i.putExtra(extraInt3, 28);

		i.setData(Uri.parse("pass integer back to main activity"));

		setResult(RESULT_OK, i);

		finish();
	}

}

主要学习代码:

1)取得Intent中的String数据

getIntent().getStringExtra(extraStr)

2)取得Intent中的Int数据:

getIntent().getIntExtra(extraInt, 0)

3)回传String数据:

i.setData(Uri.parse("pass integer back to main activity"));

4)回传函数:

setResult(RESULT_OK, i);

也是利用Toast数据显示。

时间: 2024-10-10 11:21:29

Android百日程序:Intent传递数据的相关文章

Android学习之Intent传递数据

Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据. 一.向下一个Activity传递数据主要是利用Intent作为“信使”来调用, 原Activity需要创建一个intent,并用putExtra(键,值)方法向intent中放入需要传递的信息,然后启动. public void onClick(View view){ String msg =

Android 消息广播Intent传递数据

1.创建布局文件activity_broadcast.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match

Android开发经验之—intent传递大数据

在Activity或者组件之前传递信息时,一般采用intent绑定bundle的方式传值,但在使用过程中需要注意的是不要用bundle传递大容量数据: 在做项目的过程中,需要将听写界面的听写结果信息传递到听写记录界面供显示用,但是由于传递的数据量过大导致程序ANR,甚至直接报异常(传递的信息里面有bitmap转换成的byte数组.每一个词组的拼音.词语.语音信息),经过分析发现是由于bundle不能传递大容量的数据信息,在stackoverflow里面查阅发现有同行遇到类似的问题: (1)"Th

Android网络编程之传递数据给服务器(二)

Android网络编程之传递数据给服务器(二) 请尊重他人的劳动成果,转载请注明出处:Android网络编程之传递数据给服务器(二) 我曾在<Android网络编程之传递数据给服务器(一)> 一文中介绍了如何通过GET方式传递数据给服务器,通过GET方式传递数据主要适用于数据大小不超过2KB,且对安全性要求不高的情况下.下面就介绍通过POST方式传递数据主到服务器. 一.通过Post方式传递数据给服务器 通过Post方式传递数据给服务器是Android应用程序开发提交数据给服务器的一种主要的方

Android网络编程之传递数据给服务器(一)

Android网络编程之传递数据给服务器(一) 请尊重他人的劳动成果,转载请注明出处:Android网络编程之传递数据给服务器(一) 因为Android程序需要和服务器进行通信,所以需要服务器端提供的支持. 一.通过GET方式传递数据给服务器 通过GET方式上传数据主要适用于数据大小不超过2KB,且对安全性要求不高的情况下. 1.创建服务器端: 服务器端项目结构: 第一步:创建控制器Servlet package com.jph.sgm.servlet; import java.io.IOExc

WebView之js调用Android类的方法传递数据

1,具体的思路如下: 在android中写一个Activity,里面写一个webview,这个webview加载本地的一个html文件,显示这个网页,这个网页包括一个用户名和密码的输入框和两个按钮(只有登陆按钮有用),输入用户名密码之后调用android中的类,并把输入的数据传过去,再在android中输出出来(具体你那数据做什么操作就看你的需求了),这样就做大额js与android数据交互的效果了: 在android端,一些webviwe的设置和自定义类的写法如下源码: package com

Android 开发中使用Intent传递数据的方法

Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.short[].int.int[].long.long[].float.float[].double.double[].String.String[],还有采用实现Serializable.Parcelable接口的类对象传递数据的两种方法:一种是Bundle.putSerializable(Key,Obje

Android百日程序:使用Intent回传结果

本章使用Intent,回传需要的结果: 流程: 启动主页->按下按键启动第二个activity->输入用户名,按下OK按键->回传用户名回主页->主页读取用户名并显示出来. 1 启动主页图: 2 启动第二个activity 3 输入用户名: 4 回传到主页,读取并显示: 新建项目,然后输入对应的代码就OK了. 1 主页界面代码(activity_main.xml): <LinearLayout xmlns:android="http://schemas.androi

intent传递数据和返回数据给上一个活动

startActivityForResult与startActivity的不同之处在于: 1.startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( ). 2.startActivityForResult( ) 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,

Android---8---Intent及使用Intent传递数据

Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组 件想要执行的动作,还可以在不同组件之间传递数据.Intent 一般可被用于启动活动.启动 服务.以及发送广播等场景 Intent是一种运行时绑定机制,它能在程序运行的过程中连接两个不同的组件.通过intent 程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来请求. 在这些组件之间的通讯中,主要是由Intent协助完成的.Intent负责对应用中一次操作的动作