当前位置: 首页 > 知识库问答 >
问题:

在点击预测按钮时,应用程序崩溃

祁驰
2023-03-14
    package com.example.uni;




import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.example.uni.ml.ConvertedModel;

import org.tensorflow.lite.DataType;
import org.tensorflow.lite.support.image.TensorImage;
import org.tensorflow.lite.support.tensorbuffer.TensorBuffer;

import java.io.IOException;
import java.nio.ByteBuffer;

public class MainActivity extends AppCompatActivity {
    private ImageView imgView;
    private Button predict;
    private Button select;
    private TextView tv;
    private Bitmap img;



    @Override
    protected  void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imgView = (ImageView) findViewById(R.id.imageView);
        tv = (TextView) findViewById(R.id.textView);
        select = (Button) findViewById(R.id.button);
        predict = (Button) findViewById(R.id.button2);

        select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
                startActivityForResult(intent,12);

            }
        });

        predict.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                img = Bitmap.createScaledBitmap(img,
                        500,
                        500,
                        true);

                try {
                    ConvertedModel model = ConvertedModel.newInstance(getApplicationContext());

                    // Creates inputs for reference.
                    TensorBuffer inputFeature0 = TensorBuffer.createFixedSize(new int[]{1, 500, 500, 3}, DataType.FLOAT32);

                    TensorImage tensorImage = new TensorImage(DataType.FLOAT32);
                    tensorImage.load(img);
                    ByteBuffer byteBuffer = tensorImage.getBuffer();


                    inputFeature0.loadBuffer(byteBuffer);

                    // Runs model inference and gets result.
                    ConvertedModel.Outputs outputs = model.process(inputFeature0);
                    TensorBuffer outputFeature0 = outputs.getOutputFeature0AsTensorBuffer();

                    // Releases model resources if no longer used.
                    model.close();


                    tv.setText((int) outputFeature0.getFloatArray()[0]);


                } catch (IOException e) {
                    /* TODO Handle the exception */
                }

            }
        });





    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == 100)
        {
            imgView.setImageURI(data.getData());

            Uri uri = data.getData();
            try {
                img = MediaStore.Images.Media.getBitmap(this.getContentResolver(),uri);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

在logcat我看到了这个-

    2021-11-05 13:23:38.040 24027-24027/com.example.uni I/tflite: Initialized TensorFlow Lite runtime.
2021-11-05 13:23:38.090 24027-24027/com.example.uni E/libc: Access denied finding property "ro.hardware.chipname"
2021-11-05 13:23:38.081 24027-24027/com.example.uni W/com.example.uni: type=1400 audit(0.0:232245): avc: denied { read } for name="u:object_r:vendor_default_prop:s0" dev="tmpfs" ino=14249 scontext=u:r:untrusted_app:s0:c48,c257,c512,c768 tcontext=u:object_r:vendor_default_prop:s0 tclass=file permissive=0
2021-11-05 13:23:38.841 24027-24027/com.example.uni E/com.example.un: Invalid ID 0x00000000.
2021-11-05 13:23:38.842 24027-24027/com.example.uni D/AndroidRuntime: Shutting down VM
2021-11-05 13:23:38.843 24027-24027/com.example.uni E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.uni, PID: 24027
    android.content.res.Resources$NotFoundException: String resource ID #0x0
        at android.content.res.Resources.getText(Resources.java:381)
        at android.content.res.MiuiResources.getText(MiuiResources.java:97)
        at android.widget.TextView.setText(TextView.java:6397)
        at com.example.uni.MainActivity$2.onClick(MainActivity.java:85)
        at android.view.View.performClick(View.java:7189)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
        at android.view.View.performClickInternal(View.java:7166)
        at android.view.View.access$3500(View.java:819)
        at android.view.View$PerformClick.run(View.java:27682)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at android.app.ActivityThread.main(ActivityThread.java:7592)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
2021-11-05 13:23:38.887 24027-24027/com.example.uni I/Process: Sending signal. PID: 24027 SIG: 9

需要关于发生了什么以及如何解决的建议。我使用的是android studio北极狐2020.3.1补丁3。

共有1个答案

红智鑫
2023-03-14

logcat已经告诉您它在settext()调用时崩溃了。你打过电话

tv.setText((int) outputFeature0.getFloatArray()[0]);

setText(int)中的int引用string.xml(r.string.xxx)中定义的资源ID。

如果不是从res获取字符串,则应该使用setText(CharSequence)。

tv.setText(String.format("%f",outputFeature0.getFloatArray()[0]));
 类似资料:
  • 每次我点击按钮1,我的应用程序就会崩溃。同一活动中的另一个按钮可以正常工作。我已经试过更换按钮和代码了。控制台中没有错误。

  • 这是崩溃错误logcat,每次我时钟在我的寄存器btn应用程序崩溃。 我的模拟器是在Android模拟器设备上的2gb ram。 2019-09-22 16:36:39.307 6454-6454/com。康奈克斯。connexsocial E/AndroidRuntime:致命异常:主进程:com。康奈克斯。connexsocial,PID:6454Android系统。所容纳之物Activity

  • 问题内容: 我一直试图在Eclipse中制作我的第一个android应用程序(一个简单的温度转换器),但是当我单击手机上的按钮时,该应用程序崩溃了。这是完整的Java代码 单击按钮时的LogCat 最后是按钮的xml 我不确定如何解决此问题,因此希望有人可以提供帮助。谢谢。 问题答案: 首先初始化您的按钮,然后将onclicklistener设置为它们 同样设置另一个按钮

  • } 以下是我从logcat收到的错误:

  • 我是一个java初学者,但我试图构建练习,我遇到了这个问题。用户输入捐赠,按下按钮,捐赠的值就会增加。我写了整个代码,但当我点击按钮添加捐款计数时,应用程序崩溃了。我遵循老师的所有教诲。我在活动中创建了一个方法,在ui构建器中,我转到单击按钮属性并将其设置为该方法。它应该很顺利,但每当我点击按钮时,它就崩溃了。这是我的活动,我将onClick属性设置为ComputeDoniversity。 这是模

  • 一切正常,应用程序出现了。但当我点击任何切换按钮时,应用程序就会崩溃。 我试过了,但找不到问题。其实我的知识还不够,我是这个领域的新手。所以请帮帮我。 这是查看活动。JAVA 还有这只logcat 2020-03-18 03:16:50.407 31609-31609/? E/lpaper。wallper:运行时设置的未知位_标志:0x8000 2020-03-18 03:17:04.862 31