0

私はアンドロイド(およびプログラミング)にかなり慣れていないので、この質問があまりにもばかげていないことを願っています. 私はチュートリアルを通じて、成功せずにスタックオーバーフローを検索して、私の質問に答えようとしました。

リストに SQLite データベースを入力しようとしています。リストの項目をクリックすると、リストビューとデータベースからも削除されます。ここでの「getCount()」のような基本的なメソッドでさえ出力を生成しないように見えるため、デバッグを通じて、問題は私の ArrayAdapter メソッドにあると思います。

私の SQLite DatabaseHandler クラスの場合、データベース内のすべての項目を取得して項目を削除する方法は次のとおりです。

            // Getting All breadcrumbs
    public List<Breadcrumb> getAllBreadcrumbs() {
     List<Breadcrumb> breadcrumbList = new ArrayList<Breadcrumb>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_BREADCRUMBS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Breadcrumb breadcrumb = new Breadcrumb();
            breadcrumb.setId(Integer.parseInt(cursor.getString(0)));
            breadcrumb.setBreadcrumbLatitude(cursor.getInt(1));
            breadcrumb.setBreadcrumbLongitude(cursor.getInt(2));
            // Adding location to list
            breadcrumbList.add(breadcrumb);
        } while (cursor.moveToNext());
    }

    // Deleting single breadcrumb
      public void deleteBreadcrumb(Breadcrumb breadcrumb) {
        SQLiteDatabase db = this.getWritableDatabase();
        int id = breadcrumb.getId();
        System.out.println("Comment deleted with id: " + id);
        db.delete(TABLE_BREADCRUMBS, KEY_ID
                + " = " + id, null);
        db.close();
          }

問題のあるアクティビティの XML レイアウト:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".CollectedBreadcrumbsActivity" >

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

</LinearLayout>

そして、ここに活動があります:

public class CollectedBreadcrumbsActivity extends Activity implements OnItemClickListener {

private ListView listview;
private DatabaseHandler db;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_collected_breadcrumbs);

    DatabaseHandler db = new DatabaseHandler(this);
    List<Breadcrumb> breadcrumbs = db.getAllBreadcrumbs();

    listview = (ListView) findViewById(R.id.list);
    ArrayAdapter<Breadcrumb> adapter = new ArrayAdapter<Breadcrumb>(this,
            android.R.layout.simple_list_item_1, breadcrumbs);
        listview.setAdapter(adapter);
    listview.setOnItemClickListener(this);
}

public void onItemClick(AdapterView<?> l, View v, int position, long id) {
    Log.d("HelloListView", "You clicked Item: " + id + " at position:" + position);
    Log.d("HelloListView", "Number of items in adapter:" + listview.getAdapter().getCount());
    @SuppressWarnings("unchecked")
    ArrayAdapter<Breadcrumb> adapter = (ArrayAdapter<Breadcrumb>) listview.getAdapter();
    if (listview.getAdapter().getCount() > 0) {
        Breadcrumb breadcrumb = (Breadcrumb) listview.getAdapter().getItem(position);
        db.deleteBreadcrumb(breadcrumb);
        adapter.remove(breadcrumb);
        }
    adapter.notifyDataSetChanged();
    }
}

リストビューは問題なく表示されますが、リストの項目をクリックすると、アプリがクラッシュして次のログが表示されます。

05-07 19:08:40.671: D/HelloListView(29562): You clicked Item: 5 at position:5
05-07 19:08:40.671: W/dalvikvm(29562): threadid=1: thread exiting with uncaught exception (group=0x40e4c438)
05-07 19:08:40.671: E/AndroidRuntime(29562): FATAL EXCEPTION: main
05-07 19:08:40.671: E/AndroidRuntime(29562): java.lang.NullPointerException
05-07 19:08:40.671: E/AndroidRuntime(29562):    at com.detimil.breadcrumbs1.CollectedBreadcrumbsActivity.onItemClick(CollectedBreadcrumbsActivity.java:42)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at android.widget.AbsListView.performItemClick(AbsListView.java:1268)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3059)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at android.widget.AbsListView$1.run(AbsListView.java:3950)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at android.os.Handler.handleCallback(Handler.java:615)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at android.os.Looper.loop(Looper.java:137)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at android.app.ActivityThread.main(ActivityThread.java:4950)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at java.lang.reflect.Method.invokeNative(Native Method)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at java.lang.reflect.Method.invoke(Method.java:511)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
05-07 19:08:40.671: E/AndroidRuntime(29562):    at dalvik.system.NativeStart.main(Native Method)

Log.d("HelloListView", "Number of items in adapter:" + listview.getAdapter().getCount());繰り返しますが、このログでもアプリがクラッシュする前に何も生成されないため、問題は ArrayAdapter にあるに違いないと思います。

誰かがこれについて考えているなら、私は本当に助けていただければ幸いです. 繰り返しますが、これがばかげた質問である場合は申し訳ありません。

どうもありがとうございました。

4

2 に答える 2

4

あなたdbnull

なぜなら

  DatabaseHandler db = new DatabaseHandler(this);

ローカルインスタンスを作成しますが、フィールドをインスタンス化しないdbので、このようにします

db = new DatabaseHandler(this);
于 2013-05-08T05:34:36.703 に答える
0

データベースは、ローカルではなくグローバルに開始する必要があります。

全体として、ArrayAdapter を使用して DB からロードすることはお勧めできません。データベースを管理するには、CursorAdapter と CursorLoader を使用する必要があります。

カスタム CursorAdapter に関する優れたチュートリアルは次のとおりです:リンク

CursorLoaders 用の別のもの:リンク

于 2014-02-13T17:15:14.333 に答える