为什么我当前的应用程序中没有界面?

时间:2019-07-04 07:54:08

标签: android

此刻,我正在尝试使用Android Studio编写一些应用程序。我想创建一个应用程序,向我显示加速度计的值。因此,我观看了一些YouTube视频,并获得了正确的价值。但是现在我想在手机屏幕上显示它们。我创建了一个界面,但手机上的应用程序未显示该界面。此外,当我尝试在MainActivity中使用我的界面时,还会显示一条错误消息。

如果我注释掉我所有的加速度计代码,则没有任何错误,并且布局显示正确。

package com.example.bwki_test_accelometer;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private static final String TAG = "MainActivity";
    private android.hardware.SensorManager sensorManager;
    private Sensor accelerometer;

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

        Log.d(TAG, "onCreate: Initialzing Sensor Services");
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        if (accelerometer== null){
            Toast.makeText(this, "Der Sensor ist nicht verfügbar!", Toast.LENGTH_SHORT).show();
            finish();
        }
        sensorManager.registerListener(MainActivity.this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL );
        Log.d(TAG, "onCreate: Regoster accelerometer listener");

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        Log.d(TAG, "onSensorChanged:X:" + event.values[0] + "    Y: " +   event.values[1] + "   Z:   " + event.values[2]);

        /*
        EditText XAchse=(EditText)findViewById(R.id.XAchse);
        XAchse.setText((int) event.values[0]);

        EditText YAchse=(EditText)findViewById(R.id.YAchse);
        YAchse.setText((int) event.values[1]);

        EditText ZAchse=(EditText)findViewById(R.id.ZAchse);
        ZAchse.setText((int) event.values[2]);

        */
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }}

2 个答案:

答案 0 :(得分:0)

如果从onSensorChanged(...)中删除Thread.sleep(...),它是否起作用?我认为onSensorChanged(...)被相对频繁地调用,这可能会阻止应用程序发生任何其他事情。

Android对线程上的长期运行任务并不感到兴奋。您应该在自己的工作线程中运行它。

答案 1 :(得分:0)

代码有2个问题:将文本设置为强制转换整数,然后在线程上休眠。首先,用try...catch删除整个Thread.sleep()块,因为这会引起问题,您实际上不需要在那里暂停一秒钟。其次,不要将您的加速度计值转换为int,而只是显示其原始浮点值(setText()期望资源ID为整数)。注释掉的代码块可能看起来像这样(您需要在相应的布局文件中将EditText替换为TextView):

TextView XAchse= findViewById(R.id.XAchse);
XAchse.setText(String.valueOf(event.values[0]));

TextView YAchse= findViewById(R.id.YAchse);
YAchse.setText(String.valueOf(event.values[1]));

TextView ZAchse= findViewById(R.id.ZAchse);
ZAchse.setText(String.valueOf(event.values[2]));

我在一个快速的示例应用程序中对其进行了测试,并且可以正常工作。