2013-05-09 77 views
0

我在我的活動中有AsyncClass,用於通過單擊按鈕將數據上傳到服務器。如果上傳成功。我設置IsUploaded = true並更新我的本地數據庫中的表「銷售」的值。現在我正在定期檢查本地數據庫,例如在本地數據庫中每5分鐘檢索一次,然後檢索具有IsUploaded = false的行,然後像以前一樣將數據發送到服務器。如何在一個活動中多次調用異步類?

我已經使用了下面的代碼。

AsyncClass code

Main Activity code where calling the AysncClass

我知道,它可以在不異步任務來完成,但所有與網絡相關的操作都應該在異步任務來完成的API 15以上。所以這就是我選擇這種方法的原因。

我得到一個錯誤,因爲Java.utill.ConcurrentExecution異常:定時器方法的Java.nullpointer異常。我認爲這是要求每x分鐘都有同一個對象而沒有釋放它的前一個實例。

但我該如何解決這個問題? Alaram經理在這裏工作最好嗎?

我的主要宗旨是更新後臺進程在服務器數據庫沒有通過的AsyncTask中斷主UI線程執行

+0

無法打開您的代碼鏈接。您可以發佈有問題的代碼嗎? – buptcoder 2013-05-09 07:42:55

+0

但我可以打開老闆再次嘗試@buptcoder – 2013-05-09 07:44:15

+0

@Ganesh使用並行執行的執行程序http://developer.android.com/reference/java/util/concurrent/Executor.html – Raghunandan 2013-05-09 07:54:40

回答

1

這也許是解決方案之一:

我看到你使用Timer類代碼重複每隔幾分鐘.... 要記住最重要的是,你必須當心定時器類的實例。 在整個應用程序中,您只需要一個實例(單身人士)。 要做到這一點,你可以很容易地使一個新的類

例如:

public final class SingletonInstanceFlags { 

public static boolean timerIsRunning = false; 
  

} 

,現在,你檢查的邀請Timer類是它timerIsRunning == false,如果爲假,則你讓一個實例,並設置timerIsRunning = true

我希望這會幫助你。

+0

你的意思是說,像上面定義一個類,並調用該類在我的onCreate()並檢查timerIsRunning之前我調用myTimer.schedule(新的TimerTask()... function.or我有一個查詢...我可以這樣做,就像創建一個全球變量類,並在我將調查變量,並檢查與timer.schedule(函數())... – 2013-05-09 09:45:46

+0

是的,檢查timerIsRunning在調用myTimer.schedule(新的TimerTask()... ...我記得說你應該訪問timerIsRunning以靜態的方式(com.yourpackage.SingletonInstanceFlags.timerIsRunning ...) – 2013-05-09 13:34:03

0

按照doc,一個的AsyncTask可以只執行一次,否則異常會第二次嘗試。如果你想執行相同的任務,你需要創建一個新的AsyncTask對象。

+0

我每次都像這樣創建一個新對象ua = new SyncDB(); ua.execute(「1」);,;但它仍然會引發一個concurrent.ExecutionException:NullPointer異常。 @Yangfan – 2013-05-09 07:51:13

+0

你介意發佈堆棧跟蹤嗎? – Yangfan 2013-05-09 07:58:28

+0

這裏是錯誤和冗長的logcat http://pastie.org/7821763 http://pastie.org/7821765 – 2013-05-09 09:41:43