Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试调用虚拟方法';double java.lang.double.doubleValue()';关于空对象引用_Android_Nullpointerexception - Fatal编程技术网

Android 尝试调用虚拟方法';double java.lang.double.doubleValue()';关于空对象引用

Android 尝试调用虚拟方法';double java.lang.double.doubleValue()';关于空对象引用,android,nullpointerexception,Android,Nullpointerexception,我试着对bundle进行加法,但得到了 java.lang.NullPointerException:尝试调用虚拟方法 空对象引用上的“double java.lang.double.doubleValue()” 位于com.example.teopeishen.test2.First$1.onClick(First.java:23)。什么 这意味着什么?任何人都知道这件事。它说问题出在第23行 即bundle.putdoull(“writeMark3”,writeMark3) writeMar

我试着对bundle进行加法,但得到了

java.lang.NullPointerException:尝试调用虚拟方法 空对象引用上的“double java.lang.double.doubleValue()” 位于com.example.teopeishen.test2.First$1.onClick(First.java:23)。什么 这意味着什么?任何人都知道这件事。它说问题出在第23行 即bundle.putdoull(“writeMark3”,writeMark3)


writeMark3为空,但这不是最大的问题。事实上,你有很多

  • onCreate之后的任何EditText输入都将被忽略
  • onCreate中的try-catch导致大多数相关变量为null(包括writeMark3)
  • onClick中的Bundle根本不被使用,您以一个空的意图启动一个活动,然后初始化您应该以该意图发送的Bundle

  • 提供一个复杂的答案意味着向你解释编程基础知识,因此这可能不是一个开始学习编程技能的好地方。

    像这样改变你的第一堂课活动

    package com.example.teopeishen.test2;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    
    public class First extends AppCompatActivity {
    
        public Button but;
        public void change(){
            but = (Button) findViewById(R.id.buttonGenerate);
            View.OnClickListener click = new View.OnClickListener(){
              @Override
                public void onClick (View v){
                  Intent calc = new Intent (First.this,Second.class);
                  startActivity(calc);
    
                  Bundle bundle = new Bundle();
                  bundle.putString("testName",testName.getText().toString());
                  bundle.putDouble("writeMark3",writeMark3);
                  bundle.putDouble("speakMark3",speakMark3);
                  bundle.putDouble("listenMark3",listenMark3);
                  bundle.putDouble("finalMark3",finalMark3);
    
                  Intent intent = new Intent(First.this,Second.class);
                  intent.putExtras(bundle);
                  startActivity(intent);
              }
            };
            but.setOnClickListener(click);
        }
    
    
        private EditText testName;
        private EditText writeMark;
        private EditText speakMark;
        private EditText listenMark;
    
        private Double writeMark2;
        private Double speakMark2;
        private Double listenMark2;
    
        private Double writeMark3;
        private Double speakMark3;
        private Double listenMark3;
        private Double finalMark3;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_first);
            testName = (EditText) findViewById(R.id.editTextName);
            writeMark = (EditText) findViewById(R.id.editTextWrite);
            speakMark = (EditText) findViewById(R.id.editTextSpeak);
            listenMark = (EditText) findViewById(R.id.editTextListen);
    
    
    
            try {
                writeMark2 = Double.valueOf(writeMark.getText().toString());
                speakMark2 = Double.valueOf(speakMark.getText().toString());
                listenMark2 = Double.valueOf(listenMark.getText().toString());
    
                writeMark3 = writeMark2 / 100 * 50;
                speakMark3 = speakMark2 / 100 * 30;
                listenMark3 = listenMark2 / 100 * 20;
                finalMark3 = writeMark3 + speakMark3 + listenMark3;
    
    
    
    
            } catch (Exception e) {
                finalMark3 = 0.0;
    
            }
            change();
    
        }
    }
    
    所作的改动包括:

    1.您最初是在计算editText值,而不是在单击按钮时,因此这些值没有得到更新


    2.未使用Bundle值,因为您在onclick函数内两次调用intent。

    在初始化变量后使用change()方法。我已经尝试修改代码。我不写writeMark3=writeMark2/100*50,而是写writeMark3=newdobule(writeMark2/100*50)。但它也不起作用。这是因为抛出了一个异常,并且代码没有执行。。。writeMark.getText()为null,调用writeMark.getText().toString()会引发异常,执行catch块请更具体地说明如何修复它。好的,我尝试向catch()添加代码{writeMark3=0;speakMark3=0;finalMark3=0,listenMark3=0;}然后应用程序没有崩溃,但重点是它出现异常的原因。我确实在editText框中键入了一些值。在代码中,您可以从onCreate中的editText获取文本。这意味着当活动开始时,你只得到一次值,然后你忽略编辑文本中的任何输入,检查我的答案,这正是我已经告诉你的。您必须在OnClickListener中获取EditText值。。。阅读一些关于android基础知识的教程。很抱歉,我不知道如何创建一个新的回复答案。所以我编辑你的答案。希望你不要介意。这个应用程序仍然不工作。我尝试了你的代码,但计算值仍然会出现异常,这已经设置好了,我不知道为什么。我终于成功了。我只是把getValues方法放在@override单击按钮中。然后它工作了。我想这个值只有在单击按钮时才会得到。@TeoPeiShen.这就是我在代码中所做的。.我说过你只需要这样做。.正确地查看我的代码。耶,我的错误。无论如何,非常感谢。你是职业选手。
    public class First extends AppCompatActivity {
    
    private EditText testName;
    private EditText writeMark;
    private EditText speakMark;
    private EditText listenMark;
    
    private Double writeMark2;
    private Double speakMark2;
    private Double listenMark2;
    
    private Double writeMark3;
    private Double speakMark3;
    private Double listenMark3;
    private Double finalMark3;
    
    public Button but;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        testName = (EditText) findViewById(R.id.editTextName);
        writeMark = (EditText) findViewById(R.id.editTextWrite);
        speakMark = (EditText) findViewById(R.id.editTextSpeak);
        listenMark = (EditText) findViewById(R.id.editTextListen);
    
        but = (Button) findViewById(R.id.buttonGenerate);
    
        but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
                getValues();
                Bundle bundle = new Bundle();
                bundle.putString("testName", testName.getText().toString());
                bundle.putDouble("writeMark3", writeMark3);
                bundle.putDouble("speakMark3", speakMark3);
                bundle.putDouble("listenMark3", listenMark3);
                bundle.putDouble("finalMark3", finalMark3);
    
                Intent intent = new Intent(First.this, Second.class);
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
    }
    
    public void getValues() {
        try {
            writeMark2 = Double.valueOf(writeMark.getText().toString());
            speakMark2 = Double.valueOf(speakMark.getText().toString());
            listenMark2 = Double.valueOf(listenMark.getText().toString());
    
            writeMark3 = writeMark2 / 100 * 50;
            speakMark3 = speakMark2 / 100 * 30;
            listenMark3 = listenMark2 / 100 * 20;
            finalMark3 = writeMark3 + speakMark3 + listenMark3;
    
    
        } catch (Exception e) {
            finalMark3 = 0.0;
    
        }
      }
    }