Java 如何将int值从一个类传递到另一个类?

Java 如何将int值从一个类传递到另一个类?,java,android,Java,Android,真不敢相信我在这件事上有这么多麻烦。我的游戏活动中有以下变量: public static int numberOfPointsA; 在另一项活动中 public static int numberOfPointsB; 现在我需要将这些值传递给另一个活动,在这里我应该合计这些值并将结果设置为textView。因为这些是我尝试过的公共静态变量: public static int totalScore = ClassA.numberOfPointsA + ClassB.numberOfPoin

真不敢相信我在这件事上有这么多麻烦。我的游戏活动中有以下变量:

public static int numberOfPointsA;
在另一项活动中

public static int numberOfPointsB;
现在我需要将这些值传递给另一个活动,在这里我应该合计这些值并将结果设置为textView。因为这些是我尝试过的公共静态变量:

public static int totalScore = ClassA.numberOfPointsA + ClassB.numberOfPointsB;

textView.setText("" + totalScore);
但这不起作用。所以我故意尝试:

在游戏classA中:

Intent intent = new Intent(this, Menu.class);
                intent.putExtra("foobar", numberOfPointsA);
                startActivity(intent);
在菜单类中:

Intent intent = getIntent();
    int numberOfPointsA = intent.getIntExtra("foobar", 0);
但这也不起作用。如果我把它放在活动范围内,一旦活动开始,它就会崩溃。如果我把它放在onCreate方法中,我就不能再使用我的int变量了,我在onCreate方法中不需要它,我在别处需要它

那么,如何在游戏类中设置我的变量,传递到菜单类,保存在那里,然后让它等待,直到我完成游戏类B并对该变量执行相同的操作,然后合计这两个变量,并成功地将其设置到textView

菜单活动:

public static int numberOfPointsA;
公共类Izbor扩展活动实现OnClickListener{

private int asocijacijeUkupno = 0;
private int thUkupno = 0;

int ukupanBrojPoena = asocijacijeUkupno + thUkupno;

Button toploHladno, asocijacije, cigle, spojnice, nazad, poeniTH, poeniAso, poeniCigle, poeniSpojnice, poeniUkupno;
TextView naslov;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    asocijacijeUkupno = getIntent().getIntExtra("RUNNING_TOTAL", 0);
    thUkupno = getIntent().getIntExtra("RUNNING_TOTAL2", 0);

    setContentView(R.layout.izbor);

    addListenerOnButton();

}


private void addListenerOnButton() {

    naslov = (TextView) findViewById(R.id.tvIzborNaslov);
    toploHladno = (Button) findViewById(R.id.bIzbor1);
    asocijacije = (Button) findViewById(R.id.bIzbor2);
    cigle = (Button) findViewById(R.id.bIzbor3);
    spojnice = (Button) findViewById(R.id.bIzbor4);
    nazad = (Button) findViewById(R.id.bIzborNazad);
    poeniTH = (Button) findViewById(R.id.bPoeniTH);
    poeniAso = (Button) findViewById(R.id.bPoeniAso);
    poeniCigle = (Button) findViewById(R.id.bPoeniCigle);
    poeniSpojnice = (Button) findViewById(R.id.bPoeniSpojnice);
    poeniUkupno = (Button) findViewById(R.id.bPoeniUkupno);


    toploHladno.setOnClickListener(this);
    asocijacije.setOnClickListener(this);
    cigle.setOnClickListener(this);
    spojnice.setOnClickListener(this);
    nazad.setOnClickListener(this);

}


@Override
protected void onStart() {
    super.onStart();

    if(asocijacijeUkupno != 0){
    poeniAso.setText("" + asocijacijeUkupno);
    }else{
        poeniAso.setText("");
    }
    if(thUkupno != 0){
    poeniTH.setText("" + thUkupno);
    }else{
        poeniTH.setText("");
    }
    if(ukupanBrojPoena != 0){
    poeniUkupno.setText("" + ukupanBrojPoena);
    }else{
        poeniUkupno.setText("");
    }
}

public void onClick(View v) {
    switch(v.getId()){
    case R.id.bIzbor1:
        if(music == true){
            buttonClicks.start();
                }
        startActivity(new Intent("rs.androidaplikacije.toplo_hladno.TOPLOHLADNO"));
        break;
    case R.id.bIzbor2:
        if(music == true){
            buttonClicks.start();
                }
        startActivity(new Intent("rs.androidaplikacije.toplo_hladno.ASOCIJACIJE"));
        break;
    case R.id.bIzbor3:
        if(music == true){
            buttonClicks.start();
                }

        break;
    case R.id.bIzbor4:
        if(music == true){
            buttonClicks.start();
                }

        break;
    case R.id.bIzborNazad:
        if(music == true){
            buttonBack.start();
                }
        finish();
        break;
    }

}

}下面是一个非常基本的示例,使用两个活动传递
int

第一个活动,您从中开始:

public class FirstActivity extends Activity {
    private int mTotal = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        //.... onCreate code, layout stuff etc....    
    }

    // this is tied to a View onClick call
    public void moveToSecondAct(View view) {
        Intent intent = new Intent();
        intent.putExtra("RUNNING_TOTAL",mTotal);
        intent.setClass(this, SecondActivity.class);
        //... any other options like ...
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        // start the second Activity
        startActivity(intent);
    }
}
第二个活动示例类似于:

public class SecondActivity extends Activity {
    private int mTotal = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        mTotal = getIntent().getIntExtra("RUNNING_TOTAL", 0);
        //.... onCreate code, layout stuff etc....

        Log.i("Running total is:"+ mTotal);
        // update the total on the TextView
        TextView tv = (TextView) findViewById(R.id.poeniUkupno);
        tv.setText("Total: "+ mTotal);
    }
}

编辑:进行一些更改以使事情变得更清楚

我没有完全理解您一直试图说的内容,但我得到的是您希望在FirstActivity中创建一个变量,将其值发送给SecondActivity,然后将其总和传递给ResultActivity,如果是,那么现在开始

//First Activity
public class FirstActivity extends Activity{
    int firstValue;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        firstValue = 10;
    }
    public sendValueToSecondActivity(View view){
        Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra("firstValue", firstValue);
        startActivity(intent);
    }
}

//Second Activity
public class SecondActivity extends Activity{
    int sumOfFirstAndSecond;
    int secondValue;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        secondValue = 20;

    }
    public sendValueToSecondActivity(View view){
        sumOfFirstAndSecond = getIntent().getIntExtra("firstValue") + secondValue;
        Intent intent = new Intent(this, ResultActivity.class);
        intent.putExtra("sumOfFirstAndSecond", sumOfFirstAndSecond);
        startActivity(intent);
    }
}

//Result Activity
public class ResultActivity extends Activity{
    TextView textView;
    int result;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        secondValue = 20;
        textView = (TextView) findViewById(R.id.textView);
    }
    public setResultToTextView(View view){
        result = getIntent().getIntExtra("sumOfFirstAndSecond");
        textView.setText(""+result);
    }
}

您的意思是将值从一个活动传递到另一个活动吗?这可能会有帮助:是的,我有一些分数,例如195,我将它设置为我的公共静态int变量,我需要将它发送到另一个活动。你给我的这个链接…我也试过了。我一开始活动也会出错。如果我将bundle放在onCreate方法中,我就不能再使用int变量了。根据日志,您在
Izbor.java:22
有一个NPE。。。我会看看那里;)我感觉您正在构造函数中使用
getIntent()
。不要那样做。(它属于
onCreate()
)不管怎样,Steven的想法都是正确的。我尝试了onCreate方法,得到了相同的错误。NPE在bundle所在的位置。我已经尝试了您的方法,现在没有错误,但现在我没有将最终总分设置为textView,并且我得到了我的活动的两个实例,我必须使用“后退”按钮返回两次:(另外,当我将第一个值设置为texview,然后玩下一个游戏,然后将第二个值设置为下一个textView时,第一个值丢失了。
textView
id
是什么?poeniAso表示第一个,poeniTH表示第二个,poeniUkupno表示总分。我已经做了一些更改,以帮助您从头开始我不知道该怎么做,但剩下的就看你自己了。我不可能再猜你所有的代码了。