我通過BLE從傳感器接收溫度值並將其存儲在我的數據庫中,並通過意圖來傳遞值作爲數組來繪製線性圖和線圖。我也將這些值發佈到谷歌應用程序引擎。我在runOnUiThread()中完成了這一切,因此當值太多時,我的應用程序崩潰了。是否可以將值傳遞到新線程上的圖活動?或者其他更好的建議?在android的buttonclick中使用線程
@Override
public void propertyChange(final PropertyChangeEvent event) {
final String property = event.getPropertyName();
runOnUiThread(new Runnable() {
public void run() {
try {
if (property.equals(PROPERTY_IR_TEMPERATURE)) {
double newIRValue = (Double) event.getNewValue();
// float newIRValue_1 = (Float) event.getNewValue();
TextView textView = (TextView) findViewById(R.id.ir_temperature);
String value = decimal.format(newIRValue);
String formattedText = value + DEGREE_SYM;
float value_chk = (float)(newIRValue);
String formattedText_1 = String.valueOf(value_chk);
String sensorid = test_1;
String sensortype = "temperature";
// write_data(sensorid,sensortype,value);
// Toast.makeText(getBaseContext(), "ARV sensid:"+sensorid+" senstype:"+sensortype, Toast.LENGTH_SHORT).show();
long timemilli = System.currentTimeMillis();
//Log.d("TIMMEE", String.valueOf(timemilli));
String time=String.valueOf(timemilli);
db = new DBHandler(getApplicationContext());
//db.deleteTempReadings();
// inserting data to temp table
Log.i("insert", "Inserting Records...");
);
Temperature(sensorid,formattedText_1));
//Toast.makeText(getBaseContext(), "SENSOR_ID:"+t.getSensorId()+"TEMPERATURE: "+t.getTemperature()+"TIME: "+t.getTimestamp(), Toast.LENGTH_LONG).show();
// reading data from db
Log.i("Reading", "Reading Records...");
List<Temperature> temp = db.getAllTempReadings();
int arraySize=temp.size();
double tempArray[]=new double[arraySize];
int timeArray[]=new int [arraySize];
//Log.d("ans", String.valueOf(temp.size()));
for (Temperature t : temp) {
String log="SENSOR ID: "+t.getSensorId()+"TEMPERATURE: "+t.getTemperature()+"TIME: "+t.getTimestamp();
Log.d("Record"+t, log);
}
// Reading values into the array!
for(int i=0;i<arraySize;i++){
tempArray[i]=Double.parseDouble(temp.get(i).getTemperature());
}
Button btn=(Button)findViewBy Id(R.id.btnGraph);
btn.setOnCLickListener(new View.onClickListener(){
public void onClick(View v){
Intent iIntent =new Intent(getApplicationContext(),GraphActivity.class);
tIntent.putExtra("tempArray",tempArray);
startActivity(tIntent);
}
});
// rest....posting to server code......
textView.setText(formattedText);
}
}
}
}}
我可以在runOnUiThread()內創建新線程,因爲我正在獲取裏面的溫度值。 – Ansu
不,但是你在做什麼,你是在一個線程中運行整個代碼,並從那個線程獲得溫度值,所以你必須等到該線程給出溫度值。所以,而不是使用這個線程,你必須使用[AsyncTask](http://developer.android.com/reference/android/os/AsyncTask.html),然後,無論你在onPostExecute(Result)方法得到了什麼,那麼你有開始你的另一個線程。 – Sahil
我應該爲Async Task創建一個獨立的類嗎?但溫度值可以通過屬性改變方法獲得。你可以給我一個粗略的想法如何通過一個例子去了解我的代碼。? – Ansu