2012-02-27 3 views
2

私はなぜアプリを知っていません。私はカーソル内で選択された行の数を表示しようとするとクラッシュします。私が選択した行の数を表示する行にコメントするとき、App。それ以外の場合はクラッシュします。ここでカーソルの行数を取得するときにエラーが発生しましたか?

はコードです:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    dbd = new DBDemoActivity(this); 
    db = dbd.getWritableDatabase(); 
    cv = new ContentValues(); 

    cv.put("name", "Amr"); 
    cv.put("lat", 10); 
    cv.put("lng", 20); 
    newID = db.insert("Demo", null, cv); 

    cv.put("name", "Mikila"); 
    cv.put("lat", 14); 
    cv.put("lng", 22); 
    newID = db.insert("Demo", null, cv); 

    cv.put("name", "bakri"); 
    cv.put("lat", 17); 
    cv.put("lng", 29); 
    newID = db.insert("Demo", null, cv); 

    cv.put("name", "geomatics"); 
    cv.put("lat", 50); 
    cv.put("lng", 90); 
    newID = db.insert("Demo", null, cv); 
    }   

    SQLiteCursor c = (SQLiteCursor) db.rawQuery("SELECT * FROM Demo WHERE lat = 10", null); 
    //c.moveToFirst(); 
    //Toast.makeText(getBaseContext(), c.getCount(), Toast.LENGTH_SHORT).show(); 
    //dbd.deleteMP(1); 
} 

}

LogCat:

02-27 10:46:35.675: E/AndroidRuntime(25525): FATAL EXCEPTION: main 
02-27 10:46:35.675: E/AndroidRuntime(25525): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidbook.DBDemo/com.androidbook.DBDemo.DemoData}: android.content.res.Resources$NotFoundException: String resource ID #0x9 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.os.Looper.loop(Looper.java:123) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.app.ActivityThread.main(ActivityThread.java:3691) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at java.lang.reflect.Method.invokeNative(Native Method) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at java.lang.reflect.Method.invoke(Method.java:507) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at dalvik.system.NativeStart.main(Native Method) 
02-27 10:46:35.675: E/AndroidRuntime(25525): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x9 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.content.res.Resources.getText(Resources.java:222) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.widget.Toast.makeText(Toast.java:258) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at com.androidbook.DBDemo.DemoData.onCreate(DemoData.java:54) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-27 10:46:35.675: E/AndroidRuntime(25525): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
02-27 10:46:35.675: E/AndroidRuntime(25525): ... 11 more 
+0

getApplicationContextを(使用してみてください)()してみてください。私は問題がカウントであるとは思わない。 –

+0

私は今試しましたが、問題はまだ存在します.. – LetsamrIt

+0

あなたのエラーメッセージを貼り付けてください。 – idiottiger

答えて

1

問題はToast.makeTextにあります。 makeText()は2種類がありますオーバーロードされたメソッドである - あなたが使用している何

makeText(Context c, String s, int duration) 

makeText(Context, int resId, int duration) 

秒1(残油との1)である - cursor.getCountは整数を返しますので、 。今、アンドロイドは(あなたのResourcesクラスの@genフォルダ内で)どのStringがcursor.getCountの値であるかを調べようとしています。それが見つからないので、それはResources $ NotFoundExceptionをスローします。

修正:代わりcursor.getCount()の、(String.valueOf(cursor.getCount()))の代わりにgetBaseContextのを

0

どのようにそれがクラッシュしていますか?エラーの詳細を調べる必要があります。あなたが正確に理解していない問題を理解できますか?

logcatの詳細を見て、犯人とエラーの種類を探します。

チャンスがある:あなたが要求し

  • は時間がかかりすぎます。 onCreateメソッドでDBリクエストを行うことはあまり良い考えではありません。このメソッドはUIスレッドで実行され、5秒間使用しないと、アプリケーションはANRでクラッシュします。あなたはasynctaskの方が良いでしょう。
  • getBaseContext()は面白いようですが、これを使用してください。

------- UPDATE -----

あなたの問題は、あなたがトーストにint型を渡すことです。次にintがresourceIdを表すことを期待します。

文字列を渡した場合、この問題は発生しませんでした。使用

Toast.makeText(getBaseContext(), String.valueOf(c.getCount()), toast.LENGTH_SHORT).show(); 
+0

oh .. ANRとUIが何であるかに精通していませんか?私はgetBaseContext()を使用すべきではないという意味ですか? – LetsamrIt

関連する問題