Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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
Android 正在计算每秒的数据速率,但结果始终相同_Android - Fatal编程技术网

Android 正在计算每秒的数据速率,但结果始终相同

Android 正在计算每秒的数据速率,但结果始终相同,android,Android,Iam使用处理程序计算每秒的蜂窝数据速率,每秒执行一次代码并计算总流量,然后假设从自引导以来的当前流量中减去自引导以来的旧流量,以获得每秒的当前数据速率 我面临的问题是当前的数据速率值不正确,它总是给我自引导以来的总流量。可能是我做错了什么,我还是android的初学者。下面是代码 公共类MainActivity扩展了AppCompatActivity{ private double RXOld; @Override protected void onCreate(Bundle savedIn

Iam使用处理程序计算每秒的蜂窝数据速率,每秒执行一次代码并计算总流量,然后假设从自引导以来的当前流量中减去自引导以来的旧流量,以获得每秒的当前数据速率

我面临的问题是当前的数据速率值不正确,它总是给我自引导以来的总流量。可能是我做错了什么,我还是android的初学者。下面是代码

公共类MainActivity扩展了AppCompatActivity{

private double RXOld;

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


    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {


        @Override
        public void run() {


            ////////////////////////Code to be executed every second////////////////////////////////////////

            Calendar c = Calendar.getInstance();
            int seconds = c.get(Calendar.SECOND);
            double overallTraffic = TrafficStats.getMobileRxBytes();

            double currentDataRate = overallTraffic - RXOld;

            TextView view1 = null;
            view1 = (TextView) findViewById(R.id.view1);
            view1.setText("Current Data Rate per second= " + currentDataRate);

            double RXOld = overallTraffic;

            handler.postDelayed(this, 1000);
        }
    }, 1000 );
}

首先,考虑使用一个定时器,并在开始时声明TeXVIEW。我认为这个代码应该工作,但我没有测试它:

        final TextView view1 = null;
        view1 = (TextView) findViewById(R.id.view1);
        final double[] oldT = new double[1];
        Timer timer1 = new Timer();
        TimerTask tt1 = new TimerTask() {
            @Override
            public void run() {
                double overallTraffic = TrafficStats.getMobileRxBytes();
                double trafficRate = overallTraffic - oldT[0];
                oldT[0] = overallTraffic;
                view1.setText("Current Data Rate per second= " + trafficRate);
            }
        };
        timer1.scheduleAtFixedRate(tt1,1000,1000);

注意:如果在TimerTask的run()中使用新变量,则该变量必须声明为final。您可以通过将该变量设置为1个元素的数组(“int[]varName=new int[1]”而不是“int varName”)并使用varName[0]轻松更改其值校正后的新代码应给出当前每秒数据速率,而不是varName

public class MainActivity extends AppCompatActivity {

final double [] RXOld = new double [1];
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {


        @Override
        public void run() {


            ////////////////////////Code to be executed every second////////////////////////////////////////

            Calendar c = Calendar.getInstance();
            int seconds = c.get(Calendar.SECOND);
            double overallTraffic = TrafficStats.getMobileRxBytes();

            double currentDataRate = overallTraffic - RXOld [0];

            TextView view1 = null;
            view1 = (TextView) findViewById(R.id.view1);
            view1.setText("Current Data Rate per second= " + currentDataRate);

             RXOld [0] = overallTraffic;

            handler.postDelayed(this, 1000);
        }
    }, 1000 );

double RXOld=overallTraffic;
…java的基础知识…本地变量vs字段感谢它的工作,我很可能应该加强我的java技能,因为它很低。我想问一下您何时使用过OldT[0],你是指零元素的数组oldT,还是指oldT数组的第一个元素。请原谅我的问题,但正如我所说的,我对Java的了解不多。顺便说一句,我使用了处理程序方式,它正在工作,但为什么你推荐计时器方式?再次感谢