[英]Using AsyncTask as an inner class
I have created a pedometer application which works fine as an independent application. 我已经创建了一个计步器应用程序,它可以作为独立的应用程序正常工作。 I thought I can use it in another application I have and hence came to know about AsyncTask class to do the same.
我以为可以在另一个应用程序中使用它,因此知道AsyncTask类也可以这样做。 I read about the syntax of AsyncTask and pasted the pedometer code in it accordingly but it's giving me errors that I am not able to fix.
我了解了AsyncTask的语法,并在其中粘贴了计步器代码,但它给了我我无法修复的错误。 So I just created a new project and pasted the AsyncTask code there to find where exactly I am wrong but I am getting no where.
因此,我刚刚创建了一个新项目,并将AsyncTask代码粘贴到了那里,以查找我到底在哪里错了,但是我却找不到任何地方。 Please help.
请帮忙。
Here's my code: 这是我的代码:
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)
{
}
}
} }
your implementation of the Async Class is not correct as I understand it. 据我了解,您对Async类的实现不正确。 also it may help is you showed us a stack trace or explained the errors move the code from the
这也可能对您有所帮助,例如您向我们展示了堆栈跟踪或解释了错误将代码从
@Override
protected void onProgressUpdate(Float... values) {
}
to 至
protected void onPostExecute(Float speed)
{
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(speed));
}
as everytime the onSensorChanged(SensorEvent event)method is called it will create a new AsyncTask. 每次调用onSensorChanged(SensorEvent event)方法时,它将创建一个新的AsyncTask。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.