2016-05-09 12 views
-1

Iam Berechnung der zellulären Datenrate pro Sekunde mit Handler, der Code wird jede Sekunde ausgeführt und der gesamte Verkehr berechnet, dann wird angenommen, dass der alte Verkehr seit dem Boot abziehen der aktuelle Verkehr seit dem Hochfahren, um die aktuelle Datenrate pro Sekunde zu erhalten.Berechnung der Datenrate pro Sekunde, aber das Ergebnis immer gleich

Das Problem Ich bin konfrontiert, dass die aktuelle Datenrate Wert nicht korrekt ist, gibt es immer den gesamten Gesamtverkehr seit dem Start. Vielleicht habe ich etwas falsch gemacht, ich bin immer noch Anfänger mit Android. Der Code unten.

public class MainActivity erweitert 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); 
} 
+1

'Doppel RXOld = overallTraffic geben soll;' ... java basics ... lokale var vs Feld – Selvin

Antwort

1

neue Kodex nach Berichtigung, die die aktuelle Datenrate pro Sekunde

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

Zunächst einmal sollten Sie einen Timer verwenden, und das Textview zu Beginn erklären. Ich denke, sollte dieser Code arbeiten, aber ich habe es nicht getestet:

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

Hinweis: Wenn Sie eine neue Variable in die run() der Timertask zu verwenden, muss die Variable final deklariert werden. Sie können den Wert einfach ändern, indem Sie der Variablen ein Array mit 1 Element ('int [] varName = new int [1]' anstelle von 'int varName' zuweisen und varName [0] anstelle von varName verwenden

+0

Dank es funktioniert, ich höchstwahrscheinlich werde meine Java stärken Fähigkeiten wie es niedrig ist. Während ich fragen möchte, wann Sie OldT [0] benutzt haben, meintest du das Array oldT, das Nullelement ist oder du meinst das erste Element von oldT-Array. entschuldige meine Frage aber wie gesagt mein Wissen in Java nicht so viel. – Ahmed

+0

BTW Ich habe den Handler Weg verwendet und es funktioniert, aber warum haben Sie den Timer Weg empfohlen? Danke noch einmal – Ahmed

Verwandte Themen