以前にWebビューでログインしたページからデータを読み取るアプリのサービスで実行されているスレッドがあります。そのスレッドは正常に機能しています。
今、私はこのスレッドを定期的に繰り返したいと思います。たとえば、電話がスリープ状態/画面がオフのときでも、1分に1回です。私はおそらくwake_lockでそれについて行かなければならないことを知っていますが、私にはその方法がわかりません。
ここに3つの問題があります。while(true)sleep(60000)....でスレッドを繰り返してみましたが、電話の画面が消えた後、スレッドが停止します。もっと良い方法はありますか?
次に、文字列数をゼロと比較したいと思います。文字列数がゼロより大きい場合は、xxxを実行してください。
どんな助けでも大歓迎です!
Thread downloadThread = new Thread() {
public void run() {
Document doc;
doc = null;
try {
final String url = "https://xxx.xxx.xx";
// -- Android Cookie part here --
CookieSyncManager.getInstance().sync();
CookieManager cm = CookieManager.getInstance();
String cookie = cm.getCookie(url);
// Jsoup uses cookies as "name/value pairs"
doc = Jsoup.connect("https://xxx.xxx.xx").cookie(url, cookie).get();
Elements elements = doc.select("span.tabCount");
String count = elements.first().text();
Log.d(TAG, "wart"+(count));
Log.d(TAG, "wartcookiedate:"+(cookie));
} catch (IOException e) {
e.printStackTrace();
}
}
};
downloadThread.start();
これが、以下のコードでの2回目の試行です。ユーザーがすでにログインしている場合は、完全に機能します。私の問題は、ユーザーがまだログインしていないため、アプリの起動時に文字列「count」がnullを返すことです。したがって、スケジュールされたタスクエグゼキュータ全体を停止する例外がスローされます。「count」がnullの場合に再起動する方法はありますか?
scheduleTaskExecutor= Executors.newScheduledThreadPool(5);
// This schedule a task to run every 10 seconds:
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
Document doc;
doc = null;
try {
final String url = "https://xxx.xxx.xx";
// -- Android Cookie part here --
CookieSyncManager.getInstance().sync();
CookieManager cm = CookieManager.getInstance();
String cookie = cm.getCookie(url); // returns cookie for url
// Jsoup uses cookies as "name/value pairs"
doc = Jsoup.connect("https://xxx.xxx.xx").cookie(url, cookie).get();
Elements elements = doc.select("span.tabCount");
String count = elements.first().text();
Log.d(TAG, "wart"+(count));
Log.d(TAG, "wartcookiedate:"+(cookie));
} catch (IOException e) {
e.printStackTrace();
}
}
}, 0, 10, TimeUnit.SECONDS);