Android 通过意图将整数值传递给另一个活动。不起作用

Android 通过意图将整数值传递给另一个活动。不起作用,android,android-intent,Android,Android Intent,我是Android新手,正在尝试学习如何通过意图将一些变量从活动传递到另一个活动。问题是,当我在回答完问题后运行应用程序时,它会将我带到摘要活动,该活动具有AskQusetions活动的结果(是和否的计数) 以下是我的提问活动: package com.example.quizapp; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.

我是Android新手,正在尝试学习如何通过意图将一些变量从活动传递到另一个活动。问题是,当我在回答完问题后运行应用程序时,它会将我带到摘要活动,该活动具有AskQusetions活动的结果(是和否的计数)

以下是我的提问活动:

    package com.example.quizapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.TextView;


public class AskQuestions extends Activity {

    private String[] messages;
    private int yesCount;
    private int noCount;
    private int messageNum;
    public final static String EXTRA_MESSAGE = "com.example.quizapp.MESSAGE";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ask_questions);

    }

    @Override
    public void onStart() {
        super.onStart();
        messages = getResources().getStringArray(R.array.lblask_questions);
        messageNum = 0;
        setYesCount(0);
        setNoCount(0);

        TextView lblQuestion = (TextView)findViewById(R.id.lblask_questions);
        lblQuestion.setText(messages[messageNum]);
    }

    public void onYes(View view) {
        Log.i("Quiz App", "viewing next question");

        setYesCount(getYesCount() + 1); // count yes
        messageNum++;
        if (messageNum >= messages.length) { // if the questions finished got to summary
            // go to summary
            Intent summaryIntent = new Intent(this, Summary.class);
            //int messageYes = getYesCount();
            summaryIntent.putExtra("value", getYesCount());
            startActivity(summaryIntent);
        }

        TextView lblQuestion = (TextView)findViewById(R.id.lblask_questions);
        lblQuestion.setText(messages[messageNum]);
    }

    public void onNo(View view) {
        Log.i("Quiz App", "viewing next question");

        setNoCount(getNoCount() + 1); // count not
        messageNum++;
        if (messageNum >= messages.length) { // if the questions finished got to summary
            // go to summary
            Intent summaryIntent = new Intent(this, Summary.class);
            summaryIntent.putExtra("value", getNoCount()); 
            startActivity(summaryIntent);
        }



        TextView lblQuestion = (TextView)findViewById(R.id.lblask_questions);
        lblQuestion.setText(messages[messageNum]);
    }

    public int getYesCount() {
        return yesCount;
    }

    public void setYesCount(int yesCount) {
        this.yesCount = yesCount;
    }

    public int getNoCount() {
        return noCount;
    }

    public void setNoCount(int noCount) {
        this.noCount = noCount;
    }

}
package com.example.quizapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.TextView;


/**
 * @author ***
 *
 */
public class Summary extends Activity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Bundle extras = getIntent().getExtras();
        //String value = extras.getString(AskQuestions.EXTRA_MESSAGE);


        setContentView(R.layout.summary);

    }
    @Override
    public void onStart() {
        super.onStart();

        //String value = "HELLO";

        TextView lblYes = (TextView)findViewById(R.id.yes_result);
        lblYes.setText(getIntent().getExtras().getString("value"));

        TextView lblNo = (TextView)findViewById(R.id.no_result);
        lblNo.setText(getIntent().getExtras().getString("value"));


    }


}
以下是我的总结活动:

    package com.example.quizapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.TextView;


public class AskQuestions extends Activity {

    private String[] messages;
    private int yesCount;
    private int noCount;
    private int messageNum;
    public final static String EXTRA_MESSAGE = "com.example.quizapp.MESSAGE";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ask_questions);

    }

    @Override
    public void onStart() {
        super.onStart();
        messages = getResources().getStringArray(R.array.lblask_questions);
        messageNum = 0;
        setYesCount(0);
        setNoCount(0);

        TextView lblQuestion = (TextView)findViewById(R.id.lblask_questions);
        lblQuestion.setText(messages[messageNum]);
    }

    public void onYes(View view) {
        Log.i("Quiz App", "viewing next question");

        setYesCount(getYesCount() + 1); // count yes
        messageNum++;
        if (messageNum >= messages.length) { // if the questions finished got to summary
            // go to summary
            Intent summaryIntent = new Intent(this, Summary.class);
            //int messageYes = getYesCount();
            summaryIntent.putExtra("value", getYesCount());
            startActivity(summaryIntent);
        }

        TextView lblQuestion = (TextView)findViewById(R.id.lblask_questions);
        lblQuestion.setText(messages[messageNum]);
    }

    public void onNo(View view) {
        Log.i("Quiz App", "viewing next question");

        setNoCount(getNoCount() + 1); // count not
        messageNum++;
        if (messageNum >= messages.length) { // if the questions finished got to summary
            // go to summary
            Intent summaryIntent = new Intent(this, Summary.class);
            summaryIntent.putExtra("value", getNoCount()); 
            startActivity(summaryIntent);
        }



        TextView lblQuestion = (TextView)findViewById(R.id.lblask_questions);
        lblQuestion.setText(messages[messageNum]);
    }

    public int getYesCount() {
        return yesCount;
    }

    public void setYesCount(int yesCount) {
        this.yesCount = yesCount;
    }

    public int getNoCount() {
        return noCount;
    }

    public void setNoCount(int noCount) {
        this.noCount = noCount;
    }

}
package com.example.quizapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.TextView;


/**
 * @author ***
 *
 */
public class Summary extends Activity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Bundle extras = getIntent().getExtras();
        //String value = extras.getString(AskQuestions.EXTRA_MESSAGE);


        setContentView(R.layout.summary);

    }
    @Override
    public void onStart() {
        super.onStart();

        //String value = "HELLO";

        TextView lblYes = (TextView)findViewById(R.id.yes_result);
        lblYes.setText(getIntent().getExtras().getString("value"));

        TextView lblNo = (TextView)findViewById(R.id.no_result);
        lblNo.setText(getIntent().getExtras().getString("value"));


    }


}
错误(应用程序崩溃):

控制台输出:

[2012-10-16 01:28:04-QuizApp]Android发布! [2012-10-16 01:28:04-基扎普]亚行运行正常。 [2012-10-16 01:28:04-QuizApp]执行com.example.QuizApp.main活动启动 [2012-10-16 01:28:04-QuizApp]自动目标模式:使用现有模拟器“emulator-5554”运行兼容的AVD“firstDevice” [2012-10-16 01:28:05-QuizApp]正在尝试将调试器连接到端口8621上的'com.example.QuizApp' 活动管理器:启动:Intent{act=android.Intent.action.MAIN cat=[android.Intent.category.LAUNCHER]cmp=com.example.QuizApp/.MainActivity} [2012-10-16 01:28:08-QuizApp]应用程序已部署。无需重新安装。 [2012-10-16 01:28:08-QuizApp]在设备emulator-5554上启动活动com.example.QuizApp.main 活动管理器:启动:Intent{act=android.Intent.action.MAIN cat=[android.Intent.category.LAUNCHER]cmp=com.example.QuizApp/.MainActivity} [2012-10-16 01:28:10-QuizApp]正在尝试将调试器连接到端口8621上的'com.example.QuizApp' [2012-10-16 01:28:12-QuizApp]正在尝试将调试器连接到端口8621上的'com.example.QuizApp'

Logcat错误(在重新启动eclipse之后):

您必须使用:

Intent summaryIntent = new Intent(this, Summary.class);
Bundle b=new Bundle();
b.putInt("Integer", IntValue);
summaryIntent.putExtras(b);
startActivity(summaryIntent);
要接收整数值,请使用:

Bundle b = getIntent().getExtras();
mInt= b.getInt("Integer");
这个代码对我有用


谢谢

putExtra()的第一个参数是一个包含应用程序包名和值名的字符串,例如“com.example.quizapp.yesValues”或“com.example.quizapp.noValues”

然后通过

getIntent().getExtras().getInt("com.example.quizapp.yesValues", -1);
getIntent.getExtras().getInt("com.example.quizapp.noValues", -1);
注意getInt()中的第二个参数是默认值

第二个错误是由于IndexOutOfBoundsException。您正试图访问数组中不存在的索引,该索引位于以下行:

lblQuestion.setText(messages[messageNum]);
在onYes()和onNo()方法中。请注意,在它的正上方,您检查messageNum>=messages.length,然后在通过它寻址数组之后立即执行此操作。在支票内这样做

if(messageNum < messages.length)
if(messageNum

祝你好运和快乐

您正在尝试在TextView中设置int值。我认为这可能有助于:

    TextView lblYes = (TextView)findViewById(R.id.yes_result);
    lblYes.setText(Integer.toString(getIntent().getExtras().getInt("value")));
你应该像这样把多余的放在包里:

    Bundle bundleObj = new Bundle();     
    bundleObj.putInt("value", getYesCount()); 
    summaryIntent.putExtras(bundleObj);

我相信您会因为这一行代码而出现异常:

lblQuestion.setText(messages[messageNum]);
onYes(视图)中方法

messageNum value = 5;
其中,消息数组中的项目总数为5

message.length() = 5;

因此,
ArrayIndexOutOfBounds异常

只是一个猜测。尝试进入您的
onCreate()
而不是
onStart()
@SpK尝试了,但没有任何更改。请从logcat视图粘贴日志。重新启动eclipse并再次运行应用程序。有时LogCat不会显示一些错误,比如一些。主题丢失等…@Archie.bpgc谢谢,现在LogCat显示了一些错误。我不知道有谁这个解决方案不适合我。开始思考我可能有不同于意图的问题:/那没用。这就是所有应用程序崩溃时的表现。显示来自logcat的输出,以及错误和堆栈跟踪等…这就是为什么我没有将屏幕截图放在第一位的原因。根本没有logcat错误。代码很好,但不知从何而来的崩溃。现在,在重新启动eclipse.Perfect之后,Logcat显示了一些错误。这就是我的问题!现在它正在工作。非常感谢你,哈立德