単純ではありませんが、シンプルにしようとしています。電話の呼び出しログを配列にクエリし、これらの配列をSQLテーブルに配置します。これで、テーブルにcallogができました。次に、最も古い呼び出しレコードと最も新しい呼び出しレコードを照会します。これはすべてprogressdialogで発生します。
私の問題はこのエラーです:
06-06 21:24:34.954: E/AndroidRuntime(973): java.lang.NumberFormatException: Invalid long: ""
06-06 21:24:34.954: E/AndroidRuntime(973): at java.lang.Long.invalidLong(Long.java:125)
06-06 21:24:34.954: E/AndroidRuntime(973): at java.lang.Long.parseLong(Long.java:346)
06-06 21:24:34.954: E/AndroidRuntime(973): at java.lang.Long.parseLong(Long.java:319)
06-06 21:24:34.954: E/AndroidRuntime(973): at com.b2creative.b2callstats.Calllogs$8.run(Calllogs.java:503)
06-06 21:24:34.954: E/AndroidRuntime(973): at java.lang.Thread.run(Thread.java:856)
06-06 21:24:37.860: E/WindowManager(973): Activity com.b2creative.b2callstats.Calllogs has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@412e1fb0 that was originally added here
06-06 21:24:37.860: E/WindowManager(973): android.view.WindowLeaked: Activity com.b2creative.b2callstats.Calllogs has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@412e1fb0 that was originally added here
06-06 21:24:37.860: E/WindowManager(973): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344)
06-06 21:24:37.860: E/WindowManager(973): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
06-06 21:24:37.860: E/WindowManager(973): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
ログのWindowLeaked例外は通常、開始したアクティビティが破棄された後に終了するある種の非同期タスクがある場合に発生することを読みました。また、実際の問題はやや早いはずです。無効な長いエラーです。
そこで、重要な部分をログに記録しましたが、進行状況ダイアログがアクティブな間は何も起こらないことがわかりました。私の配列は空であり、私のテーブルも空です。長い問題は、文字列に値を追加するデータがなかったため、=""である文字列が原因で発生します。要するに:
これはすべて、targetSdkVersionを13(3.2)に変更したときに発生しました。APIレベル7(2.1)では、問題は発生しませんでした。
ここに問題のある部分があります。
pd = ProgressDialog.show(Calllogs.this, "Please wait..", "Loading data. This may take a few seconds based on the number of calls.", false, true);
Thread thread = new Thread(new Runnable() {
public void run() {
//query calllog into arrays, populating table, getting date of the last and first added record, but nothing seems to be happening
//here comes the error:
String dA = "";
HotOrNot infod = new HotOrNot(Calllogs.this);
infod.open();
Cursor cursorA = infod.getAllTitles_DateLimit1("DESC");
if (cursorA.moveToFirst()){
do{
dA = cursorA.getString(5);
}while (cursorA.moveToNext());
}
Log.i("dA", dA + ""); //null
d1 = dA;
infod.close();
cal1.setTimeInMillis(Long.parseLong(dA)); //this is the first error. it looks like the table is empty.
handler.sendEmptyMessage(0);
lv1.post(new Runnable() {
public void run() {
lv1.setAdapter(adapter);
}
});
}
});
thread.start();
追加した
@Override
protected void onStop(){
super.onStop();
if (pd != null){
}
pd.dismiss();
pd = null;
}
また、このコードをonDestroyメソッドとonPauseメソッドに追加しましたが、無駄でした。
つまり、基本的に私にとってこれは、logcatが指す変数には値がない(少なくともLongタイプに変換できる値ではない)ことを意味します。これは、アクティビティが何らかの理由で終了し、アクティビティが終了したためにリークウィンドウエラーが発生するためですが、進行状況ダイアログがオンになっています。または、変数の値が不適切なためにアクティビティが終了しましたが、progressdialogがまだオンになっているのはなぜですか?悪魔の輪、何かアイデアはありますか?