Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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
Java 将AsyncTask用作内部类_Java_Android_Android Asynctask - Fatal编程技术网

Java 将AsyncTask用作内部类

Java 将AsyncTask用作内部类,java,android,android-asynctask,Java,Android,Android Asynctask,我已经创建了一个计步器应用程序,它作为一个独立的应用程序运行良好。我想我可以在我拥有的另一个应用程序中使用它,因此了解AsyncTask类也可以这样做。我阅读了AsyncTask的语法,并相应地粘贴了计步器代码,但它给了我无法修复的错误。因此,我刚刚创建了一个新项目,并将AsyncTask代码粘贴到那里,以找到我到底错在哪里,但我没有得到任何结果。请帮忙 这是我的密码: package com.example.momo.background; import android.hardware.S

我已经创建了一个计步器应用程序,它作为一个独立的应用程序运行良好。我想我可以在我拥有的另一个应用程序中使用它,因此了解AsyncTask类也可以这样做。我阅读了AsyncTask的语法,并相应地粘贴了计步器代码,但它给了我无法修复的错误。因此,我刚刚创建了一个新项目,并将AsyncTask代码粘贴到那里,以找到我到底错在哪里,但我没有得到任何结果。请帮忙

这是我的密码:

package com.example.momo.background;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

public TextView count;
public TextView mod;
public TextView cTime;
public TextView pTime;
public TextView timeDiff;
public TextView stepSpeed;
public SensorManager sensorManager;

public float speed;
float fin, initial, tdiff, sSpeed;
public SensorEvent event;


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


}

@Override
public void onSensorChanged(SensorEvent event) {
    Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
    if (countSensor != null) {

        sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI); // original
        new backgroundtask().execute();

    } else {
        Toast.makeText(this, "count sensor not available!", Toast.LENGTH_LONG).show(); //toast prints the message
    }
}

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

}

class backgroundtask extends AsyncTask<Void, Float, Float> {

    protected void onPreExecute() {
    }

    protected Float doInBackground(Void... params) {


        fin = initial / 1000000000;
        initial = event.timestamp;
        tdiff = initial / 1000000000 - fin;
        sSpeed = 1 /tdiff;
        speed = sSpeed;
        publishProgress(speed);
        return speed;

    }

    @Override
    protected void onProgressUpdate(Float... values) {
        pTime.setText(String.valueOf(fin));
        cTime.setText(String.valueOf(initial / 1000000000));
        count.setText(String.valueOf(event.values[0])); // normal pedometer
        mod.setText(String.valueOf((initial / 1000000000) % 5));
        timeDiff.setText(String.valueOf(tdiff));
        stepSpeed.setText(String.valueOf(values));
    }

    protected void onPostExecute(Void unused)
    {

    }
}
package com.example.momo.background;
导入android.hardware.Sensor;
导入android.hardware.SensorEvent;
导入android.hardware.SensorEventListener;
导入android.hardware.SensorManager;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.design.widget.FloatingActionButton;
导入android.support.design.widget.Snackbar;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.Toolbar;
导入android.view.view;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MainActivity扩展AppCompatActivity实现SensorEventListener{
公共文本视图计数;
公共文本视图模块;
公共文本视图cTime;
公共文本视图时间;
公共文本视图时间差;
公共文本浏览速度;
公共传感器管理器传感器管理器;
公众浮标速度;
浮鳍,初始,tdiff,S速度;
公共事件;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
新建backgroundtask().execute();
}
@凌驾
传感器更改时的公共无效(传感器事件){
Sensor countSensor=sensorManager.getDefaultSensor(传感器类型\步进计数器);
如果(计数传感器!=null){
sensorManager.registerListener(此,countSensor,sensorManager.SENSOR_DELAY_UI);//原始
新建backgroundtask().execute();
}否则{
Toast.makeText(此“计数传感器不可用!”,Toast.LENGTH_LONG.show();//Toast打印消息
}
}
@凌驾
精度更改时的公共无效(传感器,int精度){
}
类backgroundtask扩展了AsyncTask{
受保护的void onPreExecute(){
}
受保护的浮动doInBackground(无效…参数){
fin=初始值/100000000;
初始=event.timestamp;
tdiff=初始/1000000000-fin;
sSpeed=1/tdiff;
速度=S速度;
出版进度(速度);
返回速度;
}
@凌驾
受保护的void onProgressUpdate(浮动…值){
pTime.setText(String.valueOf(fin));
cTime.setText(String.valueOf(initial/100000000));
count.setText(String.valueOf(event.values[0]);//普通计步器
mod.setText(String.valueOf((初始值/100000000)%5));
timeDiff.setText(String.valueOf(tdiff));
setText(String.valueOf(values));
}
受保护的void onPostExecute(未使用的void)
{
}
}

}

据我所知,异步类的实现是不正确的。 另外,您向我们展示堆栈跟踪或解释错误可能会有所帮助 将代码从

@Override
protected void onProgressUpdate(Float... values) {

}


因为每次调用onSensorChanged(SensorEvent事件)方法时,它都会创建一个新的AsyncTask。

据我所知,异步类的实现是不正确的。 另外,您向我们展示堆栈跟踪或解释错误可能会有所帮助 将代码从

@Override
protected void onProgressUpdate(Float... values) {

}


每次调用onSensorChanged(SensorEvent事件)方法时,它都会创建一个新的AsyncTask。

您的代码缺少对所有内容的初始化,从要显示结果的TextView到SensorManager实例。这就是为什么您的代码会出现大量NullPointerException。确保为实例变量分配引用,以便访问实际对象(TextView等)。您得到的错误是什么?您的代码缺少对所有内容的初始化,从应该显示结果的TextView到SensorManager实例。这就是为什么您的代码会出现大量NullPointerException。确保为实例变量分配引用,以便访问实际对象(TextView等)。您得到的错误是什么