Android 中的空指针异常 - onActivityResult()
Null pointer exception in Android - onActivityResult()
当我尝试获取我设置为额外的字符串时,是什么导致了这个空指针异常?我在这里阅读了很多其他问题,但无法解决。
我将一个字符串传递给意图,它是我使用 onOKButtonClicked 方法中的 .name() 方法从枚举中获得的:
public void onSquareButtonClicked(View v)
{
brushStyle = Paint.Cap.SQUARE;
TextView currentBrushText = (TextView)findViewById(R.id.currentBrush);
currentBrushText.setText("SQUARE");
}
public void onRoundButtonClicked(View v){
brushStyle = Paint.Cap.ROUND;
TextView currentBrushText = (TextView)findViewById(R.id.currentBrush);
currentBrushText.setText("ROUND");
}
public void onOkButtonClicked(View v){
Intent intent = new Intent();
String stringBrushStyle = brushStyle.name();
intent.putExtra("new brush", stringBrushStyle);
setResult(Activity.RESULT_OK, intent);
finish();
}
}
然后尝试在此处返回结果:
protected void onActivityResult(int requestCode, int resultCode,
@Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
FingerPainterView myFingerPainter = (FingerPainterView)findViewById(R.id.fingerPainterView);
if(resultCode != RESULT_CANCELED) {
if (requestCode == COLOR_REQUEST_CODE ) {
int currentColor = data.getIntExtra("new color", 5);
myFingerPainter.setColour(currentColor);
} else if (requestCode == BRUSH_REQUEST_CODE) {
String currentBrush = getIntent().getExtras().getString("new brush");
myFingerPainter.setBrush(Paint.Cap.valueOf(currentBrush));
}
}
}
}
我的 Logcat - 不确定 who=null 在这里意味着什么,但我猜这就是导致问题的原因:
Process: com.example.myapplication, PID: 17757
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.BaseBundle.getString(java.lang.String)' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:4089)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.BaseBundle.getString(java.lang.String)' on a null object reference
at com.example.myapplication.MainActivity.onActivityResult(MainActivity.java:90)
at android.app.Activity.dispatchActivityResult(Activity.java:6932)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4085)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
更改以下行
String currentBrush = getIntent().getExtras().getString("new brush");
至
String currentBrush = data.getStringExtra("new brush");
当我尝试获取我设置为额外的字符串时,是什么导致了这个空指针异常?我在这里阅读了很多其他问题,但无法解决。
我将一个字符串传递给意图,它是我使用 onOKButtonClicked 方法中的 .name() 方法从枚举中获得的:
public void onSquareButtonClicked(View v)
{
brushStyle = Paint.Cap.SQUARE;
TextView currentBrushText = (TextView)findViewById(R.id.currentBrush);
currentBrushText.setText("SQUARE");
}
public void onRoundButtonClicked(View v){
brushStyle = Paint.Cap.ROUND;
TextView currentBrushText = (TextView)findViewById(R.id.currentBrush);
currentBrushText.setText("ROUND");
}
public void onOkButtonClicked(View v){
Intent intent = new Intent();
String stringBrushStyle = brushStyle.name();
intent.putExtra("new brush", stringBrushStyle);
setResult(Activity.RESULT_OK, intent);
finish();
}
}
然后尝试在此处返回结果:
protected void onActivityResult(int requestCode, int resultCode,
@Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
FingerPainterView myFingerPainter = (FingerPainterView)findViewById(R.id.fingerPainterView);
if(resultCode != RESULT_CANCELED) {
if (requestCode == COLOR_REQUEST_CODE ) {
int currentColor = data.getIntExtra("new color", 5);
myFingerPainter.setColour(currentColor);
} else if (requestCode == BRUSH_REQUEST_CODE) {
String currentBrush = getIntent().getExtras().getString("new brush");
myFingerPainter.setBrush(Paint.Cap.valueOf(currentBrush));
}
}
}
}
我的 Logcat - 不确定 who=null 在这里意味着什么,但我猜这就是导致问题的原因:
Process: com.example.myapplication, PID: 17757
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.BaseBundle.getString(java.lang.String)' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:4089)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.BaseBundle.getString(java.lang.String)' on a null object reference
at com.example.myapplication.MainActivity.onActivityResult(MainActivity.java:90)
at android.app.Activity.dispatchActivityResult(Activity.java:6932)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4085)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
更改以下行
String currentBrush = getIntent().getExtras().getString("new brush");
至
String currentBrush = data.getStringExtra("new brush");