Java Android Intent让我的应用程序崩溃,为什么?
因此,我在没有通过分数变量的情况下试用了我的应用程序,它成功了。但是如果我尝试使用它,它根本不会起作用 主要类别:Java Android Intent让我的应用程序崩溃,为什么?,java,android,debugging,android-layout,android-intent,Java,Android,Debugging,Android Layout,Android Intent,因此,我在没有通过分数变量的情况下试用了我的应用程序,它成功了。但是如果我尝试使用它,它根本不会起作用 主要类别: int start = 10; // start Play Intent public void onPlay(View view){ Intent playIntent = new Intent(this, Quiz_1.class); playIntent.putExtra("Score", start); startActivity(playIn
int start = 10;
// start Play Intent
public void onPlay(View view){
Intent playIntent = new Intent(this, Quiz_1.class);
playIntent.putExtra("Score", start);
startActivity(playIntent);
}
以及测验1
课程:
public class Quiz_1 extends Activity {
int printScore;
TextView printPoints;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.quiz_1);
printPoints = (TextView) findViewById(R.id.q_result);
}
Intent intent = getIntent();
int score = intent.getIntExtra("Score", 0);
String printFin = String.valueOf(score);
public void q_result(View view){
printPoints.setText(printFin);
}
我确信,当我试图将开始值传递给我的其他活动时,我犯了一些错误。在那里,我想将textView的文本更改为以前的int start值=10
所以,第一项活动: int t start=10
第二。活动: 积分=开始
printScore(它是一个TextView)setText=score所有Java代码都必须在一个方法中。这里,最后三行不在任何方法中,因此不执行
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.quiz_1);
printPoints = (TextView) findViewById(R.id.q_result);
} <----- move this closing brace
Intent intent = getIntent();
int score = intent.getIntExtra("Score", 0);
String printFin = String.valueOf(score);
} <----- to here
@覆盖
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.quick_1);
printPoints=(TextView)findViewById(R.id.q_结果);
}您需要在类似onCreate
Intent intent = getIntent();
int score = intent.getIntExtra("Score", 0);
String printFin = String.valueOf(score);
但是,崩溃仍然可能发生,因此最好在堆栈跟踪之后进行
编辑:
将所有代码更改为
public class Quiz_1 extends Activity {
int printScore;
TextView printPoints;
int score = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.quiz_1);
Bundle extras = getIntent().getExtras();
if (extras != null)
{
score = extras.getInt("Score");
}
printPoints = (TextView) findViewById(R.id.q_result);
printPoints.setText(String.valueOf(score));
}
如果您想将一个值传递给另一个意图,可以查看下面的代码
您可以像intents一样放置键值对,并且可以在您调用的活动中检索这些值。你可以研究:-
Intent returnIntent = new Intent(getApplicationContext, SecondActivity.class);
returnIntent.putExtra("name","abc");
startActivity(returnIntent,11);
在其他活动结果方法中,您可以
Bundle extras = getIntent().getExtras();
if (extras != null) {
String name = bundle.getString("name");
// and get whatever data you are adding
}
您可以查看此链接。我已经浏览了此链接-
我可能发现了一个错误
案例1:-您正在passScore键中传递defaultScore值,并在Quiz1.Java中检索它
MainActivity.Java->
startQuiz.putExtra("passScore", defaultScore);
测验1.Java->
current_score = extras.getInt("passScore");
quiz1.putExtra("passNewScore", current_score);
案例2:-您正在passNewScore中通过当前的_分数,并在Quiz2.Java中检索它
测验1.Java->
current_score = extras.getInt("passScore");
quiz1.putExtra("passNewScore", current_score);
Quiz2.Java
current_score = extras.getInt("passScore");
getScore = extras.getInt("passNewScore");
现在,这里的错误是:-
在quiz2.java中,您正在当前_score中提取passScore,因为这个键值放在了您的主_活动中,而不是您调用quiz2.java的quiz1.java中
因此,要在quiz2.java中检索这个值,必须在quiz1.java中再次传递它,从这里调用quiz2 intent
要更正它,请修改quiz1.java:-
public void on_quiz_1_wrong(View view){ // button clicked the wrong answer
current_score = current_score - 2;
Intent quiz1 = new Intent(this, Quiz_2.class);
startActivity(quiz1);
quiz1.putExtra("passNewScore", current_score);
quiz1.putExtra("passScore", whatever value you want to pass here);
}
它将不起作用
,这意味着什么?你在清单中声明了测验1吗?你在任何方法之外都有几行代码那么,我应该更改什么?我需要为类中的每一件事都使用方法吗?没有执行????那是错误的。可能您当时的意思是getIntent()返回null?谢谢,您是世界上最好的程序员!!!!!!!!!你是编程高手!!非常感谢你,你帮助了我很多,你救了我的命@blackbelt getIntent()将永远不会执行。这超出了任何方法。@Simon虽然解决方案是正确的,但原因并非100%正确。这是因为当类(Activity
,在此上下文中)创建时,变量将用值初始化(可以使用方法的返回值)。这意味着,这3行将在调用onCreate()
之前执行,并将null
返回到intent
。因此,在intent.getIntExtra(“Score”,0)
上抛出NullPointerException
,正如@blackbelt所说的那样。@user2547460也将字符串printFin
声明为类成员,如果它不是onCreate
的本地变量,并且您正在q_result
中使用它,但是如果我想传递多个变量呢?但不是来自同一个班级,我会通过intent将默认分数变量传递给该活动,但我也会传递来自不同活动的另一个值op代码中有方法public void q_result(View View){printPoints.setText(printFin);}
,它在哪里?为什么我需要使用if和extras=null,不;如果它可以在没有ti的情况下工作,那么为什么要使用if语句呢???请解释@user2547460如果要检查extras是否为null,那么这只是一个好的检查。但是你有方法点击按钮你需要设置文本但是没有公共的无效q_结果(视图){printPoints.setText(printFin);}
@Jack K Foani如果extras仍然为空怎么办printPoints=(TextView)findViewById(R.id.q_结果);printPoints.setText(String.valueOf(score))代码>执行此操作?如果其仍然为空,则表示启动测验1
类的活动未发送意向额外分数
,因此您不能使用额外分数,因为第一次检查时它为空如果为空,分数将设置为测验1
类中定义的0原始分数,但是如果Extras不为null,分数将被更改为新分数,该分数是通过intent发送到活动的。Putextra但是如果我想传递多个变量?但不是来自同一个类,我会通过intent将一个默认分数变量传递给该活动,但我也会传递来自不同活动的另一个值我无法理解你想说什么,但是你可以通过调用putExtra方法传递无限数量的键值对。我将编辑你的答案,以便你理解我,我将复制不起作用的代码,好吗?