簡體   English   中英

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM