在Android中将一个对象从一个活动传递到另一个活动

     2023-04-19     93

关键词:

【中文标题】在Android中将一个对象从一个活动传递到另一个活动【英文标题】:Pass an object from activity to activity in Android 【发布时间】:2018-10-10 14:43:13 【问题描述】:

我是 Android 编程新手。我想将一个对象从一个意图传递给另一个。我用的是Android的Parcelable,但是Parcelable好像写不正常。这是我的对象的类。

public class User implements Parcelable


//parameters
private String name;
private String surname;
private String email;
private String number;
private String username;
private String Uid;

//constructors
public User(final FirebaseUser user, final DatabaseReference reference)
    Uid = user.getUid();
    reference.addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) 
            name = dataSnapshot.child("Users").child(Uid).child("Name").getValue(String.class);
            surname = dataSnapshot.child("Users").child(Uid).child("Surname").getValue(String.class);
            email = dataSnapshot.child("Users").child(Uid).child("Email").getValue(String.class);
            number = dataSnapshot.child("Users").child(Uid).child("Number").getValue(String.class);
            if ( number == null)
                number = "No number";
            username = dataSnapshot.child("Users").child(Uid).child("Username").getValue(String.class);
        

        @Override
        public void onCancelled(DatabaseError databaseError) 

        
    );


public User(Parcel in) 
    this.name = in.readString();
    this.surname = in.readString();
    this.email = in.readString();
    this.number = in.readString();
    this.username = in.readString();
    this.Uid = in.readString();


public static final Creator<User> CREATOR = new Creator<User>() 
    @Override
    public User createFromParcel(Parcel in) 
        return new User(in);
    

    @Override
    public User[] newArray(int size) 
        return new User[size];
    
;

public String getEmail() 
    return email;


public String getUid()

    return Uid;


public String getName()
    return name;


public String getSurname()
    return surname;



public String getMail()
    return email;


public String getNumber()
    return number;


public String getUsername()

    return username;


@Override
public int describeContents() 
    return 0;


@Override
public void writeToParcel(Parcel dest, int flags) 
    dest.writeString(this.name);
    dest.writeString(this.surname);
    dest.writeString(this.email);
    dest.writeString(this.number);
    dest.writeString(this.username);
    dest.writeString(this.Uid);

这就是我尝试传递此用户对象的方式。

Intent intent = new Intent(getApplicationContext(), mainPage.class);
intent.putExtra("User",mUser);

以及我如何获得:

Intent intent = getIntent();
user = intent.getParcelableExtra("User");
displayName = user.getName();

我在 Log 的第一个活动中检查了 getUsername() 方法是否有效,它工作正常。但是,当我尝试将其发送到另一个活动时,getUsername 返回null

【问题讨论】:

你能告诉我们你在填写你的“实际”数据吗? 您在第一个活动中在哪里调用Log。请记住,您是从 Firebase 异步获取数据...这就是为什么我们需要更多详细信息,尤其是 #getParcelableExtra() 如果找不到对象,则返回 null 请展示您如何构建User 实例。您确定所有字段都包含有效的Strings? 【参考方案1】:

主活动:

public class MainActivity extends AppCompatActivity 

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

        User user = new User();
        user.setUid("1");
        user.setName("kaushal");
        user.setSurname("gosaliya");
        user.setEmail("kaushalgosaliya5@gmail.com");
        user.setUsername("kaushalgosaliya5");
        user.setNumber("8866456322");

        startActivity(new Intent(MainActivity.this,UserDetail.class).putExtra("userdetail",user));
    

用户详情活动:

public class UserDetail extends Activity 

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_userdetail);

        if(getIntent().hasExtra("userdetail"))
            User user = getIntent().getParcelableExtra("userdetail");
            Toast.makeText(UserDetail.this,""+user.getName(),Toast.LENGTH_LONG).show();
        
    

【讨论】:

OP 没有要求这个。 User 对象很可能包含 null 值,因为当 OP 传递 mUser 对象时,很可能尚未从 Firebase 检索数据!

如何在androidstudio中将堆栈从一个活动传递到另一个活动(代码片段)

我试图在androidstudio中将堆栈从一个活动传递到另一个活动。目前我有一个名为:Stack<Integer>teamAstack=newStack<>();的堆栈我这样传递它:publicvoidonClick(Viewview)Intentintent=newIntent(MainActivity.this,GameReview.class);intent.pu 查看详情

在android中将值从一个窗口传递到另一个窗口

】在android中将值从一个窗口传递到另一个窗口【英文标题】:Passingvaluefromonewindowtotheanotherinandroid【发布时间】:2011-08-0200:02:39【问题描述】:我想将用户在第一个窗口中插入的值显示到下一个窗口。我在第一个窗口中接受用户... 查看详情

如何在android中将图像从一个活动发送到另一个活动?

】如何在android中将图像从一个活动发送到另一个活动?【英文标题】:Howtosendimagefromoneactivitytoanotherinandroid?【发布时间】:2012-07-2021:08:02【问题描述】:我在一个类中有一个imageView,单击imageView时会出现一个对话框,其中有两... 查看详情

如何在android中将图像从一个活动发送到另一个活动

】如何在android中将图像从一个活动发送到另一个活动【英文标题】:Howtosendimagefromoneactivitytoanotherinandroid【发布时间】:2016-11-0402:51:23【问题描述】:主要活动holder.cardView.setOnClickListener(newView.OnClickListener()@OverridepublicvoidonClick(Vie... 查看详情

无法在Android中将变量值从一个活动发送到另一个活动

】无法在Android中将变量值从一个活动发送到另一个活动【英文标题】:UnabletosendvariablevaluefromoneactivitytotheotherinAndroid【发布时间】:2022-01-2101:50:01【问题描述】:我正在尝试将存储在变量my_var中的值从一个活动发送到Android中的... 查看详情

使用 Segue 在 Swift 中将带有数据的对象从一个视图传递到另一个视图

】使用Segue在Swift中将带有数据的对象从一个视图传递到另一个视图【英文标题】:PassinganobjectwithdatafromoneviewtoanotherviewinSwiftusingSegue【发布时间】:2018-03-2202:08:30【问题描述】:我正在尝试使用Swift4将带有数据的对象从一个视图... 查看详情

无法将类的对象从一个活动传递到另一个活动? [复制]

】无法将类的对象从一个活动传递到另一个活动?[复制]【英文标题】:Unabletopassanobjectofaclassfromoneactivitytoanother?[duplicate]【发布时间】:2013-08-1113:18:53【问题描述】:在传递类中传递对象的代码finalArrayList<SongDetails>Songinfo=get... 查看详情

如何在 Rails 中将对象从一个控制器传递到另一个控制器?

】如何在Rails中将对象从一个控制器传递到另一个控制器?【英文标题】:HowcanIpassobjectsfromonecontrollertoanotherinrails?【发布时间】:2010-11-2004:01:10【问题描述】:我一直在尝试了解render_to,但没有取得多大成功。基本上我有控制器... 查看详情

如何将用户定义的对象从一个活动传递到另一个活动[重复]

】如何将用户定义的对象从一个活动传递到另一个活动[重复]【英文标题】:howtopassauserdefinedobjectfromoneactivitytoanother[duplicate]【发布时间】:2012-10-1122:35:31【问题描述】:可能重复:HowtopassobjectfromoneactivitytoanotherinAndroid我想将一... 查看详情

将整个捆绑(对象)本身从某个活动的片段传递和接收到另一个活动

...布时间】:2021-03-0508:37:29【问题描述】:我正在开发一个android应用程序,我在Activity类(仪表板活动)中从firebase获取所有用户数据,然后使用 查看详情

如何在 Android Java 中将 1000 多个项目列表从一个 Activity 发送到另一个?

】如何在AndroidJava中将1000多个项目列表从一个Activity发送到另一个?【英文标题】:Howtosend1000+itemsListfromoneActivitytootherinAndroidJava?【发布时间】:2021-07-2420:50:17【问题描述】:我想将1000多个项目的列表从一项活动发送到另一项活... 查看详情

Android:将信息从一个活动传递到另一个[重复]

】Android:将信息从一个活动传递到另一个[重复]【英文标题】:Android:Passinformationfromoneactivitytoanother[duplicate]【发布时间】:2018-01-1314:23:39【问题描述】:我正在尝试将信息(更具体地说是带有信息的类)从一个活动传递到另一... 查看详情

如何将不可打包的对象从活动传递到另一个活动?

】如何将不可打包的对象从活动传递到另一个活动?【英文标题】:Howtopassnonparcelableobjectstofromactivitytoanotheractivity?【发布时间】:2016-01-0521:19:04【问题描述】:我有两个对象从两个不同的类实例化,两个类都没有实现parcelable或s... 查看详情

在 knockout.js 中将 observable 从一个视图模型传递到另一个视图模型

】在knockout.js中将observable从一个视图模型传递到另一个视图模型【英文标题】:passobservablefromoneviewmodeltoanotherinknockout.js【发布时间】:2018-01-1820:29:19【问题描述】:在一个视图中,我有一个按钮可以导航到另一个视图“addWork”... 查看详情

如何在颤动中将数据从一个小部件传递到另一个小部件?

】如何在颤动中将数据从一个小部件传递到另一个小部件?【英文标题】:HowicanpassDatafromonewidgettoanotherwidgetinflutter?【发布时间】:2020-08-0809:55:15【问题描述】:我想将数据从一个小部件传递到另一个小部件。我正在从firebase获... 查看详情

android-将toast从一个活动传递到另一个活动(代码片段)

不确定这是否有效但我正在尝试从CustomerCall活动向RiderHome活动发送Toast消息。一旦司机选择取消。需要将Toast发送到RiderHome活动,说“驱动程序已取消请求”可以这样做吗?CustomerCallbtnCancel=(Button)findViewById(R.id.btnDecline);btnCancel.setO... 查看详情

在 Laravel Livewire 中将值从一个页面传递到另一个页面

】在LaravelLivewire中将值从一个页面传递到另一个页面【英文标题】:PassingavaluefromonepagetoanotherinLaravelLivewire【发布时间】:2021-06-0803:58:27【问题描述】:我是LivewireLaravel的新手,我有一个关于如何将值从一个页面传递到另一个页... 查看详情

在 Perl 中将包含空格的参数从一个脚本传递到另一个脚本

】在Perl中将包含空格的参数从一个脚本传递到另一个脚本【英文标题】:PassingargumentscontainingspacesfromonescripttoanotherinPerl【发布时间】:2020-06-0207:14:41【问题描述】:我正在尝试将参数从一个Perl脚本传递到另一个。一些参数包含... 查看详情