-5

所以我在没有传递分数变量的情况下试用了我的应用程序,并且它有效。但是,如果我尝试使用它,它根本不起作用。

主类:

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);
}

Quiz_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 value = 10;

所以,

第一个活动: int t start = 10;

第二。活动:int分数=开始;
printScore(这是一个TextView) setText = score

4

5 回答 5

4

如果您想将值传递给另一个意图,您可以查看下面的代码。

您可以像在意图中一样放置键值对,并且可以在您正在调用的活动中检索这些值。您可以查看:-

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
}

你可以看看这个。

于 2013-11-02T14:16:44.707 回答
0

所有 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
于 2013-11-02T13:48:30.163 回答
0

您需要将这些包含在类似的方法中onCreate

Intent intent = getIntent();
int score = intent.getIntExtra("Score", 0);
String printFin = String.valueOf(score);

但是崩溃可能仍然会发生,所以最好发布堆栈跟踪

编辑:

String printFin; //declare as class member
@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);
    printFin = String.valueOf(score);
}
于 2013-11-02T13:48:48.387 回答
0

将所有代码更改为

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));
}
于 2013-11-02T13:55:28.093 回答
0

我已经浏览了这个链接 - http://pastebin.com/BGAkdeCv

我可能发现了一个错误

案例 1: - 您在 passScore 键中传递 defaultScore 值并在 Quiz1.Java MainActivity.Java 中检索它 ->

startQuiz.putExtra("passScore", defaultScore);

Quiz_1.Java ->

  current_score   = extras.getInt("passScore");

案例 2:-您在 passNewScore 中传递 current_score 并在 Quiz2.Java
Quiz_1.Java 中检索它->

   quiz1.putExtra("passNewScore", current_score);

Quiz2.Java

  current_score   = extras.getInt("passScore");
  getScore = extras.getInt("passNewScore");

现在,这里的错误是:- 在 quiz2.java 中,您在 current_score 中提取 passScore,因为此键值放在您的 main_activity 中,而不是您调用 quiz2.java 的 quiz1.java 中。

所以要在 quiz2.java 中检索这个值,你必须在 quiz1.java 中再次传递它,从你调用 quiz2 意图的地方

要更正它,请修改您的 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);

}
于 2013-11-03T08:35:47.317 回答