簡體   English   中英

使用AsyncTask作為內部類

[英]Using AsyncTask as an inner class

我已經創建了一個計步器應用程序,它可以作為獨立的應用程序正常工作。 我以為可以在另一個應用程序中使用它,因此知道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)
    {

    }
}

}

據我了解,您對Async類的實現不正確。 這也可能對您有所幫助,例如您向我們展示了堆棧跟蹤或解釋了錯誤將代碼從

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

}

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));
}

每次調用onSensorChanged(SensorEvent event)方法時,它將創建一個新的AsyncTask。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM