Java 如何在活动2(android)中更改活动1中传递的对象的值

Java 如何在活动2(android)中更改活动1中传递的对象的值,java,android,Java,Android,我正在尝试在android studio制作一个基本的应用程序。 简单地说,我有两个活动页面和三个班级 类1 MainActivity.java属于活动1 类别2 MarketActivity.java属于活动2 类3 CharacterAction.java在这个类中,我们有角色特性 在活动1中,我们有3个按钮 按钮1的用途是当你点击按钮时的攻击。1个角色将获得2点攻击力。我们的用途是当你在市场活动中购买物品,而角色被攻击时,它将获得2+2点攻击力 在CharacterAction.java

我正在尝试在android studio制作一个基本的应用程序。 简单地说,我有两个活动页面和三个班级

类1 MainActivity.java属于活动1

类别2 MarketActivity.java属于活动2

类3 CharacterAction.java在这个类中,我们有角色特性

在活动1中,我们有3个按钮

按钮1的用途是当你点击按钮时的攻击。1个角色将获得2点攻击力。我们的用途是当你在市场活动中购买物品,而角色被攻击时,它将获得2+2点攻击力

在CharacterAction.java类中,我们有以下内容:

private int kilo;            // Weight
private int hareketSayisi;   //Energy
public int saldiriGucu;      //Attack power
public int saldiriBonus = 2; // it specifies how much attack power you will gain in one attack.

public int getKilo() {  return kilo;  }

public int getHareketSayisi() { return hareketSayisi;  }

public int getSaldiriGucu() { return saldiriGucu;  }

public String savas() {
    if (hareketSayisi > 0) {    // if energy > 0
        hareketSayisi--;        // energy - 1
        saldiriGucu = saldiriGucu + saldiriBonus;    // attackpower = attackpower + attackbonus it will add to attack power + 2
        kilo--;     //weight - 1
            return "karakter savasti";     //return character attacked
    } else {
            return "Yeterli hareket yok";     // there is no energy left
    }
}
和MainActivity.java:

characterAction.setKilo(10);            // set the weight 10

characterAction.setSaldiriGucu(0);      // set the attack power 0

characterAction.setHareketSayisi(10);   // set the energy 10
我将这些对象从MaintActivity.java传递到MarketActivity.java:

characterAction = (CharacterAction) getIntent().getSerializableExtra("CharacterAction");
这里没有问题

让我们看看活动2(市场)

上面说如果你买了这把剑,你每次攻击的攻击力增益将增加2倍

我的问题是:

我在MarketActivity.java上得到了onClick()方法

@Override
public void onClick(View view) {
    if (view.getId() == btnSatinAl1.getId()) {
        tvSuccesful.setVisibility(View.VISIBLE);

        if (characterAction.saldiriGucu > 10) {    // if attackpower > 10
            characterAction.saldiriBonus = (characterAction.saldiriBonus * 2);    // attack power bonus * 2
            tvSuccesful.setText("Satın alım başarılı");    // Succesful
                    btnSatinAl1.setVisibility(View.INVISIBLE);

        } else {
            tvSuccesful.setText("Yetersiz saldiri gücü");    // Not enough attack power.
        }
    }
}
在这些onClick()方法中,它需要在成功购买剑的同时增加+2攻击加值。但是它不会。在MarketActivity.java中,它说成功购买了剑,但当我打开活动1并试图攻击它时,每次攻击仍然会增加+2攻击力

我如何增加这些


感谢您的阅读。

解决这个问题的方法很少,我将从*

startActivityForResult()
方式1:

在MarketActivity更新对象中使用cache并在cache中保存更新,接下来在第一个活动中,您应该从缓存更新对象,例如wtih:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        when (requestCode to resultCode) {
            Navigator.XXX_REQUEST_CODE to Activity.RESULT_OK -> {
                refreshDataFromCache()
            }
        }
    }
方式2:

如果不想使用缓存,请在结果意图的数据中传递更新的对象,然后更新对象和下一个UI:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        when (requestCode to resultCode) {
            Navigator.XXX_REQUEST_CODE to Activity.RESULT_OK -> {
                data?.let {
                    val xxx = Parcels.unwrap<XXX>(data.getParcelableExtra(xActivity.DATA_TAG))
                    item = Parcels.unwrap<XXX>(data.getParcelableExtra(xActivity.DATA_TAG))
                }
            }
        }
    }
override-on-activityresult(请求代码:Int,结果代码:Int,数据:Intent?){
何时(从请求代码到结果代码){
Navigator.XXX\u请求\u代码到Activity.RESULT\u确定->{
数据?让我们{
val xxx=Parcels.unwrap(data.getParcelableExtra(xActivity.data_标记))
item=包裹.展开(data.getParcelableExtra(xActivity.data_标记))
}
}
}
}
包裹。展开是从


我解决了更改公共int-saldiriBonus=2;//攻击加成 对公共静态int saldiriBonus=2; 我所做的一切。
将方法更改为static..

当您将对象传递给第二个活动时,它会在那里复制并编辑该实例。因此,当您返回到第一个活动时,您正在访问在第一个活动中创建的实例,该实例与第二个活动不同。如果要跨多个活动操作数据,请使用数据库或共享首选项。