intent传递数据的二种方式startActivityForResult为什么不行?

e网情深e 2014-09-12 11:59:01
package com.example.intentsenddatademo;

import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

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

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}

@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);
}
@Override
protected void onStart() {
super.onStart();
// displaySera();
// displayPace();
}
public void sendSera(View v) {
Intent intent = new Intent(MainActivity.this, TestActivity.class);
startActivityForResult(intent, 1);
// startActivity(intent);
}

public void sendPace(View v) {
Intent intent = new Intent(MainActivity.this, TestActivity.class);
startActivityForResult(intent, 2);
// startActivity(intent);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
// TODO Auto-generated method stub
switch (resultCode) {
case 100:
displaySera();
break;
case 200:
displayPace();
break;
default:
break;
}
}

private void displayPace() {
List<PersonPacerable> personPareList = getIntent()
.getParcelableArrayListExtra("pace");
if(personPareList==null){
Toast.makeText(MainActivity.this, "pace传递数据为null", Toast.LENGTH_LONG)
.show();
return;
}
if (personPareList.size() > 0) {
Toast.makeText(MainActivity.this, "pace传递数据成功", Toast.LENGTH_LONG)
.show();
outputList2(personPareList);
} else {
Toast.makeText(MainActivity.this, "pace传递数失败", Toast.LENGTH_LONG)
.show();
}
}

private void displaySera() {
List<PersonSeraliable> personSeraliablesList = (List<PersonSeraliable>) getIntent()
.getSerializableExtra("sera");
if(personSeraliablesList==null){
Toast.makeText(MainActivity.this, "sera传递数据为null", Toast.LENGTH_LONG)
.show();
return;
}
if (personSeraliablesList.size() > 0) {
Toast.makeText(MainActivity.this, "sera传递数据成功", Toast.LENGTH_LONG)
.show();
outputList1(personSeraliablesList);
} else {
Toast.makeText(MainActivity.this, "sera传递数失败", Toast.LENGTH_LONG)
.show();
}
}

private void outputList2(List<PersonPacerable> list) {
// TODO Auto-generated method stub
for (PersonPacerable p : list) {
System.out.println("name:"+p.getName() + ":" + "age:" + p.getAge() + "\t");
}
}

private void outputList1(List<PersonSeraliable> list) {
// TODO Auto-generated method stub
for (PersonSeraliable p : list) {
System.out.println("name:"+p.getName() + ":" + "age:" + p.getAge() + "\t");
}
}

/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}

}


package com.example.intentsenddatademo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class TestActivity extends Activity {
List<PersonSeraliable> personSeraliableList=new ArrayList<PersonSeraliable>();
List<PersonPacerable> personPacerableList=new ArrayList<PersonPacerable>();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
init();
}
private void init() {
// TODO Auto-generated method stub
for (int i = 0; i < 10; i++) {
String name="张三"+i;
int age=i;
PersonPacerable personPacerable=new PersonPacerable(name, age);
PersonSeraliable personSeraliable=new PersonSeraliable(name,age);
personPacerableList.add(personPacerable);
personSeraliableList.add(personSeraliable);
}
}
public void back(View v){
// back
Intent intent=new Intent(TestActivity.this,MainActivity.class);
intent.putExtra("sera", (Serializable)personSeraliableList);
setResult(100, intent);
// startActivity(intent);
finish();
}
public void back2(View v){
// back
Intent intent=new Intent(TestActivity.this,MainActivity.class);
intent.putParcelableArrayListExtra("pace", (ArrayList<PersonPacerable>)personPacerableList);
setResult(200, intent);
// startActivity(intent);
finish();
}
}
我使用红色部分的时候,传递数据是正常的,但是用startActivityForResult时传递的数据过去就变为null了。求解!!
...全文
293 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
魅离儿 2014-09-12
  • 打赏
  • 举报
回复
http://m.baidu.com/from=2001a/bd_page_type=1/ssid=0/uid=0/pu=usm%400%2Csz%401320_1003%2Cta%40iphone_2_4.2_1_9.9/baiduid=4952E1C3E2DBC65C1114B11F7A408478/w=0_10_setresult/t=iphone/l=3/tc?ref=www_iphone&lid=6190608747684477040&order=1&vit=osres&tj=www_normal_1_0_10&m=8&srd=1&cltj=cloud_title&dict=20&sec=41404&di=5b2ccac0a87fbc0b&bdenc=1&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_ytK1DK6mlrte4viZQRAXjb-RXWXHkfwwyPQps-DcyzyKTEz7qR2rKtnxmdN78vwdcbshgCAKxYZhg2iOgSAUDYpzK 应该能解决你的问题
lionfresh 2014-09-12
  • 打赏
  • 举报
回复
你都没有传递数据,当然是null。请仔细看下startActivityForResult的用法。
e网情深e 2014-09-12
  • 打赏
  • 举报
回复
List<PersonPacerable> personPareList = getIntent() .getParcelableArrayListExtra("pace");这里的getIntent()应该换为intent,即onActivityresult中返回的第三个参数,intent.n改了之后就OK了。
e网情深e 2014-09-12
  • 打赏
  • 举报
回复
引用 5 楼 lionfresh 的回复:
[quote=引用 4 楼 wqbs369 的回复:] [quote=引用 1 楼 lionfresh 的回复:] 你都没有传递数据,当然是null。请仔细看下startActivityForResult的用法。
intent.putParcelableArrayListExtra("pace", (ArrayList<PersonPacerable>)personPacerableList);这句不是传递了数据了吗〈〉?[/quote] setResult(200, intent);是个什么方法[/quote] 这个不就是设置返回的setResult(responseCode,intent)
lionfresh 2014-09-12
  • 打赏
  • 举报
回复
引用 4 楼 wqbs369 的回复:
[quote=引用 1 楼 lionfresh 的回复:] 你都没有传递数据,当然是null。请仔细看下startActivityForResult的用法。
intent.putParcelableArrayListExtra("pace", (ArrayList<PersonPacerable>)personPacerableList);这句不是传递了数据了吗〈〉?[/quote] setResult(200, intent);是个什么方法
e网情深e 2014-09-12
  • 打赏
  • 举报
回复
引用 1 楼 lionfresh 的回复:
你都没有传递数据,当然是null。请仔细看下startActivityForResult的用法。
intent.putParcelableArrayListExtra("pace", (ArrayList<PersonPacerable>)personPacerableList);这句不是传递了数据了吗〈〉?
e网情深e 2014-09-12
  • 打赏
  • 举报
回复
这个根据不能解决我的问题啊!

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧