TensorFlow Lite Android应用程序因NullPointerException ‘void android.widget.TextView.setText(java.lang.CharSequence)’ 在空对象引用上崩溃

我正在开发一个Android应用程序,该程序从用户那里获取输入,并将其传递给已转换为tflite的TensorFlow机器学习模型进行预测。然而,在接收到输入后,我的应用程序崩溃了。在我编写的应用程序无法工作后,我使用了我在YouTube教程中跟随的代码,以获取一些见解。但是在两种情况下,我都得到了同样的错误。这是代码。

import androidx.appcompat.app.AppCompatActivity;import android.content.*;import android.content.res.*;import android.os.Bundle;import android.view.View;import android.widget.*;import org.tensorflow.lite.Interpreter;import java.io.FileInputStream;import java.io.IOException;import java.nio.MappedByteBuffer;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.nio.channels.FileChannel;import android.os.Bundle;public class Input_Activity_2 extends AppCompatActivity{    EditText inputNumber;    Button inferButton;    TextView outputNumber;    Interpreter tflite;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_input__2);        inputNumber=(EditText)findViewById(R.id.inputNumber);        outputNumber=(TextView)findViewById(R.id.outputNumber);        inferButton=(Button)findViewById(R.id.inferButton);        //final int getText1=Integer.parseInt(inputNumber.getText().toString());        try{            tflite=new Interpreter(loadModelFile());        }catch(Exception ex){            ex.printStackTrace();        }        //当我们点击推理按钮时,应该进行推理        inferButton.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View view){                float prediction=doInference(inputNumber.getText().toString());                outputNumber.setText(Float.toString(prediction));            }        });    }    public float doInference(String inputString){        //输入形状为[1]。单值输入        float[] inputVal=new float[1];        inputVal[0]=Float.valueOf(inputString);        //输出形状为[1][1]        float[][] outputval=new float[1][1];        //运行推理,传递输入形状并获取输出形状        tflite.run(inputVal, outputval);        //推理值位于[0][0]        float inferredValue=outputval[0][0];        return inferredValue;    }    private MappedByteBuffer loadModelFile() throws IOException {        AssetFileDescriptor fileDescriptor=this.getAssets().openFd("test_linear.tflite");        FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());        FileChannel fileChannel = inputStream.getChannel();        long startOffset = fileDescriptor.getStartOffset();        long declaredLength = fileDescriptor.getDeclaredLength();        return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);    }}

这是Python代码

import tensorflow as tfimport numpy as npfrom tensorflow import kerasfrom tensorflow import litemodel=keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])model.compile(optimizer='sgd', loss='mean_squared_error')xs=np.array([-1.0,0.0,1.0,2.0,3.0,4.0],dtype=float)ys=np.array([-3.0,-1.0,0.0,3.0,5.0,7.0],dtype=float)model.fit(xs,ys,epochs=500)print(model.predict([10.0]))keras_file="test_linear.h5"keras.models.save_model(model,keras_file)converter=lite.TocoConverter.from_keras_model_file(keras_file)tflite_model=converter.convert()open("test_linear.tflite","wb").write(tflite_model)

我得到了以下错误

E/AndroidRuntime: FATAL EXCEPTION: main    Process: com.example.androidfirebaseauth2019, PID: 10695    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference        at com.example.androidfirebaseauth2019.Input_Activity_2$1.onClick(Input_Activity_2.java:48)        at android.view.View.performClick(View.java:7125)        at android.view.View.performClickInternal(View.java:7102)        at android.view.View.access$3500(View.java:801)        at android.view.View$PerformClick.run(View.java:27336)        at android.os.Handler.handleCallback(Handler.java:883)        at android.os.Handler.dispatchMessage(Handler.java:100)        at android.os.Looper.loop(Looper.java:214)        at android.app.ActivityThread.main(ActivityThread.java:7356)        at java.lang.reflect.Method.invoke(Native Method)        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

任何帮助都将不胜感激。谢谢。

编辑:-

这是我的activity_input_2

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@drawable/background"    android:exported="true"    tools:context=".Input_Activity_2">    <EditText        android:id="@+id/inputNumber"        android:layout_width="221dp"        android:layout_height="0dp"        android:layout_marginTop="150dp"        android:layout_marginBottom="34dp"        android:ems="10"        android:inputType="number"        app:layout_constraintBottom_toTopOf="@+id/inferButton"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" />    <Button        android:id="@+id/inferButton"        android:layout_width="218dp"        android:layout_height="0dp"        android:layout_marginBottom="55dp"        android:text="Find my Organ!"        app:layout_constraintBottom_toTopOf="@+id/textView"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/inputNumber" />    <TextView        android:id="@+id/textView"        android:layout_width="0dp"        android:layout_height="0dp"        android:layout_marginStart="22dp"        android:layout_marginEnd="22dp"        android:layout_marginBottom="97dp"        android:text="TextView"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/inferButton" /></androidx.constraintlayout.widget.ConstraintLayout>

回答:

您试图在activity_input__2.xml中查找一个不存在的TextView。您有一个inputNumber,但没有outputNumber,所以这个调用返回null

outputNumber=(TextView)findViewById(R.id.outputNumber);

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注