android实现两个activity数据交互

  android如何实现两个Activity数据交互?主要是根据Intent的携带功能,intent可以携带很多信息,比如Bundle,URI甚至对象(此时要序列化,并且对象里面的成员变量如果是对象,也要序列化),实现的具体代码如下:

package com.example.yzj.android_8_3;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private ImageView img;
    private Button btn_register;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        setListener();
    }

    private void setListener() {
        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,RegisterActivity.class);
                startActivityForResult(intent, 0x123);
            }
        });
    }

    private void init() {
        btn_register=(Button)findViewById(R.id.btn_register);
        img=(ImageView)findViewById(R.id.img);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==0x123&&resultCode==0x124){
            String str=data.getStringExtra("uri");
            if(str!=null) {
                Uri uri = Uri.parse(str);
                img.setImageURI(uri);
            }
        }
    }

}
package com.example.yzj.android_8_3;

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

/**
 * Created by YZJ on 2016/8/3.
 */
public class RegisterActivity extends Activity{
    private ImageView img;
    private Button btn_register;
    private Uri uri;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_register);
        init();
        setListener();
    }

    private void setListener() {
        img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent,0x123);
            }
        });
        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=getIntent();
                if(uri!=null){
                    intent.putExtra("uri",uri.toString());
                }
                setResult(0x124, intent);
                finish();
            }
        });
    }

    private void init() {
        img=(ImageView)findViewById(R.id.img);
        img.setImageResource(R.drawable.a);
        btn_register=(Button)findViewById(R.id.btn_register);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==0x123&&resultCode==RESULT_OK){
            uri=data.getData();
            img.setImageURI(uri);
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxWidth="50dp"
        android:maxHeight="50dp"
        android:adjustViewBounds="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:src="@mipmap/ic_launcher"/>
    <EditText
        android:layout_below="@+id/img"
        android:id="@+id/et_user"
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"/>
    <EditText
        android:layout_below="@+id/et_user"
        android:id="@+id/et_psw"
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"/>
    <Button
        android:id="@+id/btn_register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/et_psw"
        android:layout_centerHorizontal="true"
        android:text="注册"/>
</RelativeLayout>

一般而言,传递一个标识符,如上面的uri是效率比较高的做法,然而,有时候我们需要传递一个对象,那么,可以用到parcelable去做,具体做法可以参考官方API的bitmap,即位图,bitmap实现了parcelable接口。

				
时间: 2024-10-24 08:15:22

android实现两个activity数据交互的相关文章

Android 客户端与服务器端进行数据交互(二、登录客户端)

概要 Android客户端分为User,HttpUtil,HttpCallbackListener,MainActivity四个部分.User model与服务端的一样,一方面是用于本地用户信息的存储model,另一方面也是为了保证构造URL时使用的key一致. HttpUtil封装了发送Http请求的过程和构造URL的函数,HttpCallbackListener是用于发送请求后的回调接口,MainActivity就是用于测试的Activity交互界面了. User model 不再贴出,见上

Android中突发情况Activity数据的保存和恢复

Android中突发情况Activity数据的保存和恢复 写在前面:在我们的APP使用的过程中,总有可能出现各种手滑.被压在后台.甚至突然被杀死的情况.所以对APP中一些临时数据或关键持久型数据,就需要我们使用正确的方式进行保存或恢复. 突发情况都有哪些? 因为本文讨论的是当一些突发情况的出现时,对数据的保存和恢复.所以现在总结一下突发情况应该都有哪些? 点击back键 点击锁屏键 点击home键 其他APP进入前台 启动了另一个Activity 屏幕方向旋转 APP被Kill 当这些突发情况发

Android 客户端与服务器端进行数据交互(一、登录服务器端)

概要 安卓APP要实现很多功能(比如登录注册.发表评论等)时都必须要使用到网络数据交互.所以在学习了这部分内容后,就将其以最常见的登录过程为例整理出来,也方便跟我一样的新手能迅速学习上手. 预期效果图如下,输入手机号和密码,点击Login按钮,上传数据到服务器端进行验证,再对结果进行反馈. 博客分一二两篇,第一篇是服务器端,第二篇是Android客户端 而服务器端分为User model.UserDAO.LoginServlet三个部分,只写了用户登录验证流程中最简单的实现逻辑,仅供参考. Us

Android中两个Activity之间简单通信

在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信息的发起者为Test,接收者为Target,代码如下: Test类: 1 package com.example.testsend; 2 3 import android.content.Intent; 4 import android.support.v7.app.AppCompatActivit

Android PHP 通过JSON进行数据交互

一.首先是Android客户端解析PHP返回的JSON数据 1.PHP代码(这里用到了数据库,如果没有准备数据库的话,可以自定义字符串) <?php $link=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); mysql_query("SET NAMES utf8"); mysql_select_db(SAE_MYSQL_DB,$link); $sql=mysql_

Android和.net API的数据交互

一..net API 一般的页面都是.aspx文件,由于.aspx文件都带有HTML的格式,我们传递的都是json格式的数据,所以html页面格式对json格式有影响,故而我们写Web-API都不会采用.ASPX的页面.而是选用一般应用窗口界面:.ashx文件. 二.请求方式: 一般我们.net端响应请求和Android端都一样有2种方式:GET/POST, GET请求时,收到的信息如:aaa.aspx?id=123&xx=88&yy=99,通过后台aaa.aspx.cs响应请求.会暴露信

Android 两个Activity之间信息的交互

出处:http://blog.csdn.net/veryitman/article/details/6611138  感谢原文作者,整个逻辑很清楚,这备份下 多个 Activity 之间可以通过 Application 共享数据,在这里我就让两个 Activity 共享 Handler(更新UI,我一般使用 Handler),主 Activity 中更新 UI,另一个 Activity 发送更新UI的消息.这样就达到在主Activity更新UI的目的.好吧,具体看代码! 1. 主 Activit

Android中Fragment与Activity之间的交互(两种实现方式)

(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何实现数据交互的. 我们可以这样理解,宿主Activity中的Fragment之间要实现信息交互,就必须通过宿主Activity,Fragment之间是不可能直接实现信息交互的. Fragment与

Android进阶之Fragment与Activity之间的数据交互

1 为什么 因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常. 2 Activity把值传递给Fragment 2.1 第一种方式,也是最常用的方式,就是使用Bundle来传递参数 (1)宿主Activity/FragmentAdapter中: Bundle bundle = new Bundle(); bundle.putString(Constant.INTENT_ID, productId); Fragment fragment =