Android 为什么我当前的应用程序中没有界面?
目前,我正在尝试用Android Studio编写一些应用程序。我想创建一个应用程序,向我显示加速度计的值。所以我看了一些Youtube视频,得到了正确的值。但现在我想在我的手机屏幕上显示它们。我创建了一个界面,但我手机上的应用程序没有显示它。此外,当我尝试在MainActivity中使用我的界面时,会出现一条错误消息 如果我注释掉加速度计的所有代码,就不会有任何错误,布局也会显示正确Android 为什么我当前的应用程序中没有界面?,android,Android,目前,我正在尝试用Android Studio编写一些应用程序。我想创建一个应用程序,向我显示加速度计的值。所以我看了一些Youtube视频,得到了正确的值。但现在我想在我的手机屏幕上显示它们。我创建了一个界面,但我手机上的应用程序没有显示它。此外,当我尝试在MainActivity中使用我的界面时,会出现一条错误消息 如果我注释掉加速度计的所有代码,就不会有任何错误,布局也会显示正确 package com.example.bwki_test_accelometer; import andr
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) {
}}
如果从onSensorChanged(…)中删除Thread.sleep(…)是否有效?我认为onSensorChanged(…)的调用相对频繁,这可能会防止应用程序发生任何其他情况
安卓对其“线程”上的长时间运行任务并不十分兴奋。您应该在自己的工作线程中运行该线程。如果删除该线程,该线程是否有效。从onSensorChanged(…)中删除sleep(…)?我认为onSensorChanged(…)的调用相对频繁,这可能会防止应用程序发生任何其他情况
安卓对其“线程”上的长时间运行任务并不十分兴奋。您应该在自己的工作线程中运行它。代码有两个问题:将文本设置为强制转换整数和在线程上休眠。首先,使用
Thread.sleep()
,删除整个try…catch
块,因为它会导致问题,您实际上不需要在那里暂停1秒。第二,不要将加速计值强制转换为int,只需显示其原始浮点值(setText()
要求资源ID为整数)。注释掉的块可能如下所示(您需要在相应的布局文件中将EditText替换为TextView):
我在一个快速示例应用程序中测试了它,它工作正常。代码有两个问题:将文本设置为强制转换整数和在线程上休眠。首先,使用
Thread.sleep()
,删除整个try…catch
块,因为它会导致问题,您实际上不需要在那里暂停1秒。第二,不要将加速计值强制转换为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]));