Return extras onActivityResult 始终为 null
Return extras onActivityResult always null
我正在构建我的第一个应用程序,我 运行 遇到了一个问题,即在 ActivityResult 的意图中传递额外内容。我试图寻找答案,但找不到合适的答案。据我所知,我遵循使用意图传递数据的“正常”结构,确保使用 setResult() 传递的意图而不是 activity 的意图。但是我的知识非常有限,所以我可能只是忽略了一些明显的东西。
该应用程序的想法是在纸牌游戏中跟踪分数。
我的应用目前包含 3 个活动。
- MainActivity是填写玩家名字的主界面
- StartToWiez 使用这些名称并创建一个 table 来记录分数。
- 从此页面开始新的 activity (StartRound) 以根据用户的输入计算分数。
- 然后应将此分数传回 StartToWiez activity,StartToWiez activity 应使用分数填充 table。
我尝试在 setResult() 中传递的意图的附加项中传递一个包。我试着把乐谱作为意图的直接附加物。通过这两种方式,我都会得到同样的错误。所以看起来返回的 extras 在返回的意图中不存在。但我不明白为什么不像 setResult() 那样意图有额外的东西。
错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.wiezen, PID: 7924
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.wiezen/com.example.wiezen.StartToWiez}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:4976)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5017)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2123)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
at com.example.wiezen.StartToWiez.onActivityResult(StartToWiez.java:65)
at android.app.Activity.dispatchActivityResult(Activity.java:8140)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4969)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5017)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2123)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Activity: MainActivity.java
package com.example.wiezen;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
//create a Bundle object
Bundle extras = new Bundle();
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sharedpreferences = getSharedPreferences("Settings", Context.MODE_PRIVATE);
}
/** Called when the user taps the Send button */
public void startToWiez(View view) {
Intent intent = new Intent(this, StartToWiez.class);
EditText player1Name = (EditText) findViewById(R.id.Player1Name);
String player1NameText = player1Name.getText().toString();
EditText player2Name = (EditText) findViewById(R.id.Player2Name);
String player2NameText = player2Name.getText().toString();
EditText player3Name = (EditText) findViewById(R.id.Player3Name);
String player3NameText = player3Name.getText().toString();
EditText player4Name = (EditText) findViewById(R.id.Player4Name);
String player4NameText = player4Name.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("PLAYER1_NAME", player1NameText);
editor.putString("PLAYER2_NAME", player2NameText);
editor.putString("PLAYER3_NAME", player3NameText);
editor.putString("PLAYER4_NAME", player4NameText);
editor.apply();
startActivity(intent);
}}
Activity StartToWiez.java
package com.example.wiezen;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class StartToWiez extends AppCompatActivity {
Bundle extras;
SharedPreferences sharedpreferences;
Integer player1Score;
Integer player2Score;
Integer player3Score;
Integer player4Score;
Integer aantalRondes = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_to_wiez);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
sharedpreferences = getSharedPreferences("Settings", Context.MODE_PRIVATE);
extras = intent.getExtras();
// Capture the layout's TextView and set the string as its text
TextView header1 = findViewById(R.id.Player1Header);
TextView header2 = findViewById(R.id.Player2Header);
TextView header3 = findViewById(R.id.Player3Header);
TextView header4 = findViewById(R.id.Player4Header);
header1.setText(sharedpreferences.getString("PLAYER1_NAME", "Player 1"));
header2.setText(sharedpreferences.getString("PLAYER2_NAME", "Player 2"));
header3.setText(sharedpreferences.getString("PLAYER3_NAME", "Player 3"));
header4.setText(sharedpreferences.getString("PLAYER4_NAME", "Player 4"));
}
public void startRound(View view) {
Intent intent = new Intent(this, StartRound.class);
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
aantalRondes++;
TableLayout table = (TableLayout) StartToWiez.this.findViewById(R.id.tableLayout);
// Inflate your row "template" and fill out the fields.
TableRow row = (TableRow) LayoutInflater.from(StartToWiez.this).inflate(R.layout.tablerow, null);
player1Score += data.getIntExtra("Player1Score", 0);
player2Score += data.getIntExtra("Player2Score", 0);
player3Score += data.getIntExtra("Player3Score", 0);
player4Score += data.getIntExtra("Player4Score", 0);
((TextView) row.findViewById(R.id.player1Score)).setText(String.valueOf(player1Score));
((TextView) row.findViewById(R.id.player2Score)).setText(String.valueOf(player2Score));
((TextView) row.findViewById(R.id.player3Score)).setText(String.valueOf(player3Score));
((TextView) row.findViewById(R.id.player4Score)).setText(String.valueOf(player4Score));
table.addView(row);
if(aantalRondes == 4){
TableRow row2 = (TableRow) LayoutInflater.from(StartToWiez.this).inflate(R.layout.line_after_4_rounds, null);
table.addView(row2);
aantalRondes = 0;
}
}
}
}
Activity: StartRound.java
package com.example.wiezen;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CheckedTextView;
import android.widget.Spinner;
import android.widget.TextView;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
public class StartRound extends AppCompatActivity {
SharedPreferences sharedpreferences;
Spinner gameType;
Spinner troef;
Spinner aantalSlagen;
ArrayAdapter<String> adapter;
ArrayAdapter<String> adapterTroef;
ArrayAdapter<String> adapterAantalSlagen;
CheckBox player1;
CheckBox player2;
CheckBox player3;
CheckBox player4;
CheckBox player1Win;
CheckBox player2Win;
CheckBox player3Win;
CheckBox player4Win;
Boolean[] winners = new Boolean[4];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_round);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
//get the shared prefs that store player names
sharedpreferences = getSharedPreferences("Settings", Context.MODE_PRIVATE);
//set player names for the checkboxes
player1 = findViewById(R.id.player1Checkbox);
player2 = findViewById(R.id.player2Checkbox);
player3 = findViewById(R.id.player3Checkbox);
player4 = findViewById(R.id.player4Checkbox);
player1.setText(sharedpreferences.getString("PLAYER1_NAME", "defaultValue"));
player2.setText(sharedpreferences.getString("PLAYER2_NAME", "defaultValue"));
player3.setText(sharedpreferences.getString("PLAYER3_NAME", "defaultValue"));
player4.setText(sharedpreferences.getString("PLAYER4_NAME", "defaultValue"));
player1Win = findViewById(R.id.player1Win);
player2Win = findViewById(R.id.player2Win);
player3Win = findViewById(R.id.player3Win);
player4Win = findViewById(R.id.player4Win);
//set the game type dropdown values for the spinner
gameType = (Spinner) findViewById(R.id.gameType);
adapter = new ArrayAdapter<String>(StartRound.this,android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.typeSpel));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
gameType.setAdapter(adapter);
//set the game type dropdown values for the spinner
troef = (Spinner) findViewById(R.id.troef);
adapterTroef = new ArrayAdapter<String>(StartRound.this,android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.troef));
adapterTroef.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
troef.setAdapter(adapterTroef);
//set the game type dropdown values for the spinner
aantalSlagen = (Spinner) findViewById(R.id.aantalSlagen);
adapterAantalSlagen = new ArrayAdapter<String>(StartRound.this,android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.aantalSlagen));
adapterAantalSlagen.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
aantalSlagen.setAdapter(adapterAantalSlagen);
//on change of game type spinner do something
gameType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
// using finsih()
Button closeButton = (Button) findViewById(R.id.calculateScore);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
winners[0] = player1Win.isChecked();
winners[1] = player2Win.isChecked();
winners[2] = player3Win.isChecked();
winners[3] = player4Win.isChecked();
Boolean[] players = new Boolean[4];
players[0] = player1.isChecked();
players[1] = player2.isChecked();
players[2] = player3.isChecked();
players[3] = player4.isChecked();
int[] score = new int[4];
Integer behaaldAantalSlagen = (Integer) Integer.parseInt(aantalSlagen.getSelectedItem().toString());
String gametypetest = gameType.getSelectedItem().toString();
switch(gametypetest) {
//algorithm to define the score based on the gametype. score is added to the array score
}
Intent returnIntent = getIntent();
returnIntent.putExtra("Player1Score", score[0]);
returnIntent.putExtra("Player2Score", score[1]);
returnIntent.putExtra("Player3Score", score[2]);
returnIntent.putExtra("Player4Score", score[3]);
setResult(RESULT_OK, returnIntent);
StartRound.this.finish();
}
});
}
}
在 returnIntent
中,您将 Player1Score
作为整数传递。因为 score
是一个 int 数组。
并且在 onActivityResult
中,您将它作为字符串类型获取。像这样data.getStringExtra("Player1Score")
。这导致了一个问题。
您需要将其作为 int only.like data.getIntExtra("Player1Score")
获取。然后不需要解析它,因为它已经是 int
我想我现在明白了。我正在尝试在单元化整数上使用 =+。所以最重要的是,当我定义我的整数时,它没有设置为 0。这是游戏的起点。所有玩家的得分都应为 0。
因此,当在整数上使用 += 时,它不是在抱怨意图或数据,而是在抱怨您无法添加到空值整数这一事实。
我正在构建我的第一个应用程序,我 运行 遇到了一个问题,即在 ActivityResult 的意图中传递额外内容。我试图寻找答案,但找不到合适的答案。据我所知,我遵循使用意图传递数据的“正常”结构,确保使用 setResult() 传递的意图而不是 activity 的意图。但是我的知识非常有限,所以我可能只是忽略了一些明显的东西。
该应用程序的想法是在纸牌游戏中跟踪分数。
我的应用目前包含 3 个活动。
- MainActivity是填写玩家名字的主界面
- StartToWiez 使用这些名称并创建一个 table 来记录分数。
- 从此页面开始新的 activity (StartRound) 以根据用户的输入计算分数。
- 然后应将此分数传回 StartToWiez activity,StartToWiez activity 应使用分数填充 table。
我尝试在 setResult() 中传递的意图的附加项中传递一个包。我试着把乐谱作为意图的直接附加物。通过这两种方式,我都会得到同样的错误。所以看起来返回的 extras 在返回的意图中不存在。但我不明白为什么不像 setResult() 那样意图有额外的东西。
错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.wiezen, PID: 7924
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {com.example.wiezen/com.example.wiezen.StartToWiez}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:4976)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5017)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2123)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
at com.example.wiezen.StartToWiez.onActivityResult(StartToWiez.java:65)
at android.app.Activity.dispatchActivityResult(Activity.java:8140)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4969)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5017)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2123)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Activity: MainActivity.java
package com.example.wiezen;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
//create a Bundle object
Bundle extras = new Bundle();
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sharedpreferences = getSharedPreferences("Settings", Context.MODE_PRIVATE);
}
/** Called when the user taps the Send button */
public void startToWiez(View view) {
Intent intent = new Intent(this, StartToWiez.class);
EditText player1Name = (EditText) findViewById(R.id.Player1Name);
String player1NameText = player1Name.getText().toString();
EditText player2Name = (EditText) findViewById(R.id.Player2Name);
String player2NameText = player2Name.getText().toString();
EditText player3Name = (EditText) findViewById(R.id.Player3Name);
String player3NameText = player3Name.getText().toString();
EditText player4Name = (EditText) findViewById(R.id.Player4Name);
String player4NameText = player4Name.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("PLAYER1_NAME", player1NameText);
editor.putString("PLAYER2_NAME", player2NameText);
editor.putString("PLAYER3_NAME", player3NameText);
editor.putString("PLAYER4_NAME", player4NameText);
editor.apply();
startActivity(intent);
}}
Activity StartToWiez.java
package com.example.wiezen;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class StartToWiez extends AppCompatActivity {
Bundle extras;
SharedPreferences sharedpreferences;
Integer player1Score;
Integer player2Score;
Integer player3Score;
Integer player4Score;
Integer aantalRondes = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_to_wiez);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
sharedpreferences = getSharedPreferences("Settings", Context.MODE_PRIVATE);
extras = intent.getExtras();
// Capture the layout's TextView and set the string as its text
TextView header1 = findViewById(R.id.Player1Header);
TextView header2 = findViewById(R.id.Player2Header);
TextView header3 = findViewById(R.id.Player3Header);
TextView header4 = findViewById(R.id.Player4Header);
header1.setText(sharedpreferences.getString("PLAYER1_NAME", "Player 1"));
header2.setText(sharedpreferences.getString("PLAYER2_NAME", "Player 2"));
header3.setText(sharedpreferences.getString("PLAYER3_NAME", "Player 3"));
header4.setText(sharedpreferences.getString("PLAYER4_NAME", "Player 4"));
}
public void startRound(View view) {
Intent intent = new Intent(this, StartRound.class);
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
aantalRondes++;
TableLayout table = (TableLayout) StartToWiez.this.findViewById(R.id.tableLayout);
// Inflate your row "template" and fill out the fields.
TableRow row = (TableRow) LayoutInflater.from(StartToWiez.this).inflate(R.layout.tablerow, null);
player1Score += data.getIntExtra("Player1Score", 0);
player2Score += data.getIntExtra("Player2Score", 0);
player3Score += data.getIntExtra("Player3Score", 0);
player4Score += data.getIntExtra("Player4Score", 0);
((TextView) row.findViewById(R.id.player1Score)).setText(String.valueOf(player1Score));
((TextView) row.findViewById(R.id.player2Score)).setText(String.valueOf(player2Score));
((TextView) row.findViewById(R.id.player3Score)).setText(String.valueOf(player3Score));
((TextView) row.findViewById(R.id.player4Score)).setText(String.valueOf(player4Score));
table.addView(row);
if(aantalRondes == 4){
TableRow row2 = (TableRow) LayoutInflater.from(StartToWiez.this).inflate(R.layout.line_after_4_rounds, null);
table.addView(row2);
aantalRondes = 0;
}
}
}
}
Activity: StartRound.java
package com.example.wiezen;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CheckedTextView;
import android.widget.Spinner;
import android.widget.TextView;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
public class StartRound extends AppCompatActivity {
SharedPreferences sharedpreferences;
Spinner gameType;
Spinner troef;
Spinner aantalSlagen;
ArrayAdapter<String> adapter;
ArrayAdapter<String> adapterTroef;
ArrayAdapter<String> adapterAantalSlagen;
CheckBox player1;
CheckBox player2;
CheckBox player3;
CheckBox player4;
CheckBox player1Win;
CheckBox player2Win;
CheckBox player3Win;
CheckBox player4Win;
Boolean[] winners = new Boolean[4];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_round);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
//get the shared prefs that store player names
sharedpreferences = getSharedPreferences("Settings", Context.MODE_PRIVATE);
//set player names for the checkboxes
player1 = findViewById(R.id.player1Checkbox);
player2 = findViewById(R.id.player2Checkbox);
player3 = findViewById(R.id.player3Checkbox);
player4 = findViewById(R.id.player4Checkbox);
player1.setText(sharedpreferences.getString("PLAYER1_NAME", "defaultValue"));
player2.setText(sharedpreferences.getString("PLAYER2_NAME", "defaultValue"));
player3.setText(sharedpreferences.getString("PLAYER3_NAME", "defaultValue"));
player4.setText(sharedpreferences.getString("PLAYER4_NAME", "defaultValue"));
player1Win = findViewById(R.id.player1Win);
player2Win = findViewById(R.id.player2Win);
player3Win = findViewById(R.id.player3Win);
player4Win = findViewById(R.id.player4Win);
//set the game type dropdown values for the spinner
gameType = (Spinner) findViewById(R.id.gameType);
adapter = new ArrayAdapter<String>(StartRound.this,android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.typeSpel));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
gameType.setAdapter(adapter);
//set the game type dropdown values for the spinner
troef = (Spinner) findViewById(R.id.troef);
adapterTroef = new ArrayAdapter<String>(StartRound.this,android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.troef));
adapterTroef.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
troef.setAdapter(adapterTroef);
//set the game type dropdown values for the spinner
aantalSlagen = (Spinner) findViewById(R.id.aantalSlagen);
adapterAantalSlagen = new ArrayAdapter<String>(StartRound.this,android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.aantalSlagen));
adapterAantalSlagen.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
aantalSlagen.setAdapter(adapterAantalSlagen);
//on change of game type spinner do something
gameType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
// using finsih()
Button closeButton = (Button) findViewById(R.id.calculateScore);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
winners[0] = player1Win.isChecked();
winners[1] = player2Win.isChecked();
winners[2] = player3Win.isChecked();
winners[3] = player4Win.isChecked();
Boolean[] players = new Boolean[4];
players[0] = player1.isChecked();
players[1] = player2.isChecked();
players[2] = player3.isChecked();
players[3] = player4.isChecked();
int[] score = new int[4];
Integer behaaldAantalSlagen = (Integer) Integer.parseInt(aantalSlagen.getSelectedItem().toString());
String gametypetest = gameType.getSelectedItem().toString();
switch(gametypetest) {
//algorithm to define the score based on the gametype. score is added to the array score
}
Intent returnIntent = getIntent();
returnIntent.putExtra("Player1Score", score[0]);
returnIntent.putExtra("Player2Score", score[1]);
returnIntent.putExtra("Player3Score", score[2]);
returnIntent.putExtra("Player4Score", score[3]);
setResult(RESULT_OK, returnIntent);
StartRound.this.finish();
}
});
}
}
在 returnIntent
中,您将 Player1Score
作为整数传递。因为 score
是一个 int 数组。
并且在 onActivityResult
中,您将它作为字符串类型获取。像这样data.getStringExtra("Player1Score")
。这导致了一个问题。
您需要将其作为 int only.like data.getIntExtra("Player1Score")
获取。然后不需要解析它,因为它已经是 int
我想我现在明白了。我正在尝试在单元化整数上使用 =+。所以最重要的是,当我定义我的整数时,它没有设置为 0。这是游戏的起点。所有玩家的得分都应为 0。
因此,当在整数上使用 += 时,它不是在抱怨意图或数据,而是在抱怨您无法添加到空值整数这一事实。