无法在Intent中传递Integer

时间:2015-02-02 20:33:56

标签: java android android-intent

我试图通过意图将整数(从edittext)传递到另一个活动。 当用户单击一个按钮时,edittext中的文本将转换为字符串然后转换为int,然后int将通过intent发送到另一个活动,但之后我必须使用int。

此处发送意图的活动:

public class HomeActivityPro extends ActionBarActivity {
 private InterstitialAd interstitial;
 EditText conttext = (EditText) findViewById ( R.id.texthome );
 Button buttone = (Button) findViewById(R.id.buttone);
 String maxom = conttext.getText().toString();
 int maxam = Integer.parseInt(maxom);

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

    View.OnClickListener maxim = new View.OnClickListener() {
        @Override
        public void onClick (View view) {
            Intent wall = new Intent(HomeActivityPro.this, GuessOne.class);
            wall.putExtra("maxPressed", maxam);
            startActivity(wall);

        }
    };
    buttone.setOnClickListener(maxim);

接收它的活动:

public class GuessOne extends ActionBarActivity {
int randone;
int contone;
int wall = 0;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_guess_one);
    wall = getIntent().getIntExtra("maxPressed", -1);
    randone = (int) (Math.random()*10+1);
    contone = 0;

}

我在这里使用它:

public void guessone (View view){
contone++;
     textcontone.setText(getString(R.string.attempts) + "" + contone);

    if (contone >= wall ){
        resultaone.setText("You Failed" + " " + wall);
        Toast.makeText(this, "You Failed", Toast.LENGTH_LONG).show();

        }

当我使用app时,int的值始终为-1。哪里我错了。

5 个答案:

答案 0 :(得分:2)

如果不将xml设置为活动,则无法使用findViewById。这意味着只有在调用findViewById后才需要使用setContentView方法。

此外,您需要在单击按钮后读取EditText文本值,否则它将始终为null / empty。

这样做

public class HomeActivityPro extends ActionBarActivity {
private InterstitialAd interstitial;
EditText conttext;
Button buttone;
String maxom;
int maxam = -1;

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

conttext = (EditText) findViewById ( R.id.texthome );
buttone = (Button) findViewById(R.id.buttone);


View.OnClickListener maxim = new View.OnClickListener() {
    @Override
    public void onClick (View view) {
        maxom = conttext.getText().toString();
        maxam = Integer.parseInt(maxom);
        Intent wall = new Intent(HomeActivityPro.this, GuessOne.class);
        wall.putExtra("maxPressed", maxam);
        startActivity(wall);

    }
};
buttone.setOnClickListener(maxim);

答案 1 :(得分:2)

问题1

将其放入点击监听器中:

String maxom = conttext.getText().toString();
int maxam = Integer.parseInt(maxom);

您想要在单击按钮时读取值而不是在打开活动时读取,是否正确?

问题2

以下内容需要在setContentViewonCreate之后:

conttext = (EditText) findViewById ( R.id.texthome );
buttone = (Button) findViewById(R.id.buttone);

将声明保留在原来的位置。只是声明:

EditText conttext;
Button buttone;

注意

在所有活动中遵循相同的模式。将视图声明为字段变量,在onCreate之后在setContentLayout中分配它们。在他们需要的时候获取价值。

答案 2 :(得分:1)

  

public int getIntExtra(String name,int defaultValue)

     

在API级别1中添加从意图中检索扩展数据。

     

参数name所需项目的名称。 defaultValue该值   如果没有存储所需类型的值,则返回   给定的名称。返回先前添加的项的值   putExtra()或默认值(如果未找到)。也可以看看   putExtra(String,int)

这意味着当您调用getIntExtra(valueName, defaultValue);时未找到任何int,因此选择了默认值。

在致电新活动之前,您应该检查maxam值是什么。

答案 3 :(得分:0)

在您收到的活动中:

wall = getIntent().getIntExtra("maxPressed");

答案 4 :(得分:0)

求助:通过getInt和String.valueOf

private static final String IMGID = "ImgID";

if (getIntent().getExtras().containsKey(IMGID)) {
 //Picasso.with(this).load(getIntent().getExtras().getString(IMG)).into(mImg);
 Picasso.with(this).load(getIntent().getExtras().getInt(String.valueOf(IMGID))).into(mImg);
}