2013-04-12 10 views
0

Я построил монитор приложение полосы пропускания, которая успешно загрузки данных, чтобы parse.com используя следующее:Синтаксический и хранение данных в реальном времени

testObject.put("dataOutput", String.valueOf(mStartTX)); 

Однако данные всегда хранятся в виде нуля. Причиной этого является начальное значение long/string, которое я отправляю, равно нулю (когда приложение запускается первым), однако оно постоянно изменяется, когда пользователь начинает отправлять и получать данные. Могут ли эти данные анализироваться в реальном времени? Или повторно каждые несколько секунд после изменения данных?

ПОЛНЫЙ ИСТОЧНИК:

public class ParseStarterProjectActivity extends Activity { 
TextView textSsid, textSpeed, textRssi; 

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


/** Called when the activity is first created. */ 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.parser); 
textSsid = (TextView) findViewById(R.id.Ssid); 
textSpeed = (TextView) findViewById(R.id.Speed); 
textRssi = (TextView) findViewById(R.id.Rssi); 
Long.toString(mStartTX); 
ParseAnalytics.trackAppOpened(getIntent()); 
ParseObject testObject = new ParseObject("TestObject"); 
testObject.put("dataOutput", String.valueOf(mStartTX)); 
testObject.saveInBackground(); 


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

ответ

0

Вы собираетесь хотите создать IntentService, который работает в то время как ваше приложение работает (или, может быть, даже если она закрыта). Собирайте свои данные с помощью AlarmService, чтобы он просыпался на заданной итерации для сбора данных. AlarmService спроектирован так, чтобы быть дружественным к аккумулятору.

private final Runnable mRunnable = new Runnable() { // ... } 

Это Runnable - отличная идея на Java; не так много в Android. Если вам просто нужно выйти из потока пользовательского интерфейса, рассмотрите AsyncTask() или аналогичный, но, как отмечалось выше, фоновая служба, вероятно, является лучшим выбором. Я не знаю, что такое знакомство с Java или соглашениями об именах, возможно, это просто простой надзор, но mRunnable должен быть всего runnable в вашем коде. Переменные с префиксом «m» или «_» (подчеркивание) представляют собой поля, такие как ваши mHandler, mStartTX и mStartRX.

Кроме того, сольная линия Long.toString(mStartTX); ничего не делает.

+0

Я невероятно новичок во всем этом. Я просто прочитал следующий учебник: http: //www.vogella.com/articles/AndroidServices/article.html, и я думаю, что понимаю общую концепцию, но точный способ ее реализации в этом сценарии - я понятия не имею ... –

+0

Что-то вроде этого выглядит правильно? Intent intent = new Intent (это, MyService.class); PendingIntent pintent = PendingIntent.getService (это, 0, намерение, 0); AlarmManager alarm = (AlarmManager) getSystemService (Context.ALARM_SERVICE); alarm.setRepeating (AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1 * 1000, pintent); –

+0

Это работает? ;) Есть много способов реализовать то, на что я указал вам. –