Android 通过意图将整数值传递给另一个活动。不起作用
我是Android新手,正在尝试学习如何通过意图将一些变量从活动传递到另一个活动。问题是,当我在回答完问题后运行应用程序时,它会将我带到摘要活动,该活动具有AskQusetions活动的结果(是和否的计数) 以下是我的提问活动: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.
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显示了一些错误。这就是我的问题!现在它正在工作。非常感谢你,哈立德