Android 正在计算每秒的数据速率,但结果始终相同
Iam使用处理程序计算每秒的蜂窝数据速率,每秒执行一次代码并计算总流量,然后假设从自引导以来的当前流量中减去自引导以来的旧流量,以获得每秒的当前数据速率 我面临的问题是当前的数据速率值不正确,它总是给我自引导以来的总流量。可能是我做错了什么,我还是android的初学者。下面是代码 公共类MainActivity扩展了AppCompatActivity{Android 正在计算每秒的数据速率,但结果始终相同,android,Android,Iam使用处理程序计算每秒的蜂窝数据速率,每秒执行一次代码并计算总流量,然后假设从自引导以来的当前流量中减去自引导以来的旧流量,以获得每秒的当前数据速率 我面临的问题是当前的数据速率值不正确,它总是给我自引导以来的总流量。可能是我做错了什么,我还是android的初学者。下面是代码 公共类MainActivity扩展了AppCompatActivity{ private double RXOld; @Override protected void onCreate(Bundle savedIn
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的了解不多。顺便说一句,我使用了处理程序方式,它正在工作,但为什么你推荐计时器方式?再次感谢