0

数秒ごとにアプリからデータをキャプチャして投稿 (帯域幅) しようとしていますが、データを解析するたびに 0 として表示されます。Android デバイスの画面で変更しようとしている値を正常に表示できますリアルタイム(送受信されるデータの量)ですが、それらをサーバーに解析しようとすると. 送信または受信された現在のデータ量の値ではなく、ゼロの値が継続的に投稿されます。最初は、間違った long 値 (mStartTX) を使用しているのではないかと考えましたが、それを「txBytes」に変更しても、まだゼロ値として表示されます。

送受信された現在のバイトの値を解析するのに助けが必要なだけですが、そうすることができないようです。

mStartTX の初期値は 0 ですが、txBytes を使用してその値をキャプチャできるはずだと思いますが、動的に変化する値 (これは捕まえようとしている。)

サーバーに間違った値を送信していると思いますが、よくわかりません。

PS私は他の値も送信しようとしました:

testObject.put("DataO", String.valueOf(textRssi));
  testObject.put("DataI", String.valueOf(textSpeed));

ただし、ゼロではなくヌルとして表示されます。何らかの理由で、動的に変化するデータを投稿できないようです...そしてその理由がわかりません。

サーバーのスクリーンショット:

https://docs.google.com/file/d/0B7v2rXEILF-aWnRUUlZEMkxQRm8/edit?usp=sharing

ソース: Service_class.java

public class Service_class extends Service {
  TextView textSsid, textSpeed, textRssi;

  public Handler mHandler = new Handler();
    public long mStartRX = 0;
  public long mStartTX = 0;
  public long txBytes;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate();

  textSsid = (TextView) findViewById(R.id.Ssid);
  textSpeed = (TextView) findViewById(R.id.Speed);
  textRssi = (TextView) findViewById(R.id.Rssi);
  Long.toString(mStartTX);
  Long.toString(mStartRX);
  Long.toString(txBytes);

   mStartRX = TrafficStats.getTotalRxBytes();
     mStartTX = TrafficStats.getTotalTxBytes();
     if (mStartRX == TrafficStats.UNSUPPORTED || mStartTX == TrafficStats.UNSUPPORTED) {
      AlertDialog.Builder alert = new AlertDialog.Builder(this);
          alert.setTitle("Uh Oh!");
          alert.setMessage("Your device does not support traffic stat monitoring.");
          alert.show();
     } else {
      mHandler.postDelayed(mRunnable, 1000);
     }
  }

 private TextView findViewById(int speed) {=
      return null;
  }

private final Runnable mRunnable = new Runnable() {
     public void run() {
      TextView RX = (TextView)findViewById(R.id.RX);
      TextView TX = (TextView)findViewById(R.id.TX);
      long rxBytes = TrafficStats.getTotalRxBytes()- mStartRX;
      RX.setText(Long.toString(rxBytes));
      long txBytes = TrafficStats.getTotalTxBytes()- mStartTX;
      TX.setText(Long.toString(txBytes));
      mHandler.postDelayed(mRunnable, 1000);
      ParseObject testObject = new ParseObject("TestObject");
      testObject.put("DataOut", String.valueOf(txBytes));
      testObject.put("DataIn", String.valueOf(mStartRX));
      testObject.put("DataRSSI", String.valueOf(textRssi));
      testObject.put("DataSpeed", String.valueOf(textSpeed));
      testObject.saveInBackground();

      final Chronometer myChronometer = (Chronometer)findViewById(R.id.chronometer);
      myChronometer.start();

      DisplayWifiState();
      this.registerReceiver(this.myWifiReceiver, new IntentFilter(
              ConnectivityManager.CONNECTIVITY_ACTION));
  }

  private Chronometer findViewById(int chronometer) {
      return null;
  }

  private void registerReceiver(BroadcastReceiver myWifiReceiver2,
              IntentFilter intentFilter) {
      }

      private BroadcastReceiver myWifiReceiver = new BroadcastReceiver() {

      @Override
      public void onReceive(Context arg0, Intent arg1) {
          NetworkInfo networkInfo = (NetworkInfo) arg1
                  .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
          if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
              DisplayWifiState();
          }
      }
  };

  public void DisplayWifiState() {

      ConnectivityManager myConnManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
      NetworkInfo myNetworkInfo = myConnManager
              .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
      WifiManager myWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
      WifiInfo myWifiInfo = myWifiManager.getConnectionInfo();

      if (myNetworkInfo.isConnected()) {
          textSsid.setText(myWifiInfo.getSSID());
          textSpeed.setText(String.valueOf(myWifiInfo.getLinkSpeed()) + " "
                  + WifiInfo.LINK_SPEED_UNITS);
          textRssi.setText(String.valueOf(myWifiInfo.getRssi()));
      } else {
          textSsid.setText("---");
          textSpeed.setText("---");
          textRssi.setText("---");
         }}};

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "Hello World", Toast.LENGTH_LONG).show();
        Log.d(TAG, "starting service");
        ParseObject testObject = new ParseObject("TestObject");
      testObject.put("DataOut", String.valueOf(txBytes));
      testObject.put("DataIn", String.valueOf(mStartRX));
      testObject.put("DataRSSI", String.valueOf(textRssi));
      testObject.put("DataSpeed", String.valueOf(textSpeed));
      testObject.saveInBackground();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }
}

データは次のようにサーバーに表示されます。

DataIn: Appears as 0 every 12 seconds
DataOut Appears as 0 every 12 seconds
DataRSSI Appears as null every 12 seconds
DataSpeed Appears as null every 12 seconds
4

1 に答える 1

0

Runnable の run() メソッドに ParseObject.saveXX() への別の呼び出しを追加する必要があると思います。

onStartCommand() は、ランナブルの「反復」ごとではなく、サービスが開始されたときにのみ実行されます

于 2013-04-15T01:20:52.367 に答える