0

そして良い一日。私のプロジェクトには 2 つのアクティビティがあります。最初のアクティビティはデータベースにデータを挿入するものですが、別のアクティビティでデータベース内のデータのリスト ビューを表示したいと考えています。

fred、george などのローカル データを配列で試してみましたが、データベースを使用しようとすると、リスト ビューがうまく機能します。アクティビティがクラッシュします。「database.open」が使えないようです

public class MyListActivity extends Activity{

    DatabaseAdapter database;

    //Creates item_details based on the ListItemDetails class
    ListItemDetails item_details;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        //Uses the arraylist and set the result
        ArrayList<ListItemDetails> result = GetSearchResults();

        ListView lv = (ListView)findViewById(R.id.listView1);
        lv.setAdapter(new CustomListAdapter(getApplicationContext(),result));

    }

    private ArrayList<ListItemDetails> GetSearchResults() {
        ArrayList<ListItemDetails> results = new ArrayList<ListItemDetails>();

        item_details = new ListItemDetails();

        /*
        database.open();
        Cursor c = database.getAllContacts();
        if (c.moveToFirst())
        {
            do {
                item_details.setFirstName(c.getString(1));
                results.add(item_details);
            } while (c.moveToNext());
        }           
        */
        return results;
    }

}

主な活動はこちら。buttonShow を使用するとデータベースが正常に開くので、buttonTest を使用してそれらをリストに保存しようとしましたが、少し混乱しました。

public class FamousPersonActivity extends Activity {

    EditText editFirstName, editLastName;
    Button buttonAdd, buttonShow, buttonTest;

    ListView lv;
    ListItemDetails item_details;
    DatabaseAdapter database;
    int request_Code = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_famous_person);

        database = new DatabaseAdapter(this);


        lv = (ListView)findViewById(R.id.listView1);
        //ArrayList<ListItemDetails> result = GetSearchResults();
        //lv.setAdapter(new CustomListAdapter(getApplicationContext(),result));
        editFirstName = (EditText)findViewById(R.id.editFirstName);
        editLastName = (EditText)findViewById(R.id.editLastName);
        buttonAdd = (Button)findViewById(R.id.buttonAdd);
        buttonShow = (Button)findViewById(R.id.buttonShow);
        buttonTest = (Button)findViewById(R.id.buttonTest);

        buttonAdd.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Toast.makeText(getApplicationContext(), "added to database", Toast.LENGTH_SHORT).show();

                database.open();
                long id = database.insertContact("Test Contact", "Test Email") ;
                database.close();
            }
        });

        buttonTest.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                Intent i = new Intent("com.id11020260.exercise6part2.MyListActivity");
                startActivityForResult(i, request_Code);

            }
        });

        buttonShow.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {

                try {
                    String destPath = "/data/data/" + getPackageName() +
                        "/databases";
                    File f = new File(destPath);
                    if (!f.exists()) {              
                        f.mkdirs();
                        f.createNewFile();

                        //---copy the db from the assets folder into 
                        // the databases folder---
                        CopyDB(getBaseContext().getAssets().open("mydb"),
                            new FileOutputStream(destPath + "/MyDB"));
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                //---get all contacts---
                database.open();
                Cursor c = database.getAllContacts();
                if (c.moveToFirst())
                {
                    do {
                        DisplayContact(c);
                    } while (c.moveToNext());
                }

                database.close();
            }

            });

        }

    private ArrayList<ListItemDetails> GetSearchResults() {

        ArrayList<ListItemDetails> results = new ArrayList<ListItemDetails>();

        item_details = new ListItemDetails();

        database.open();
        Cursor c = database.getAllContacts();

        if (c.moveToFirst())
        {
            do {
                item_details.setFirstName(c.getString(1));
                results.add(item_details);
            } while (c.moveToNext());
            database.close();
        }
        return results;
    }

    public void CopyDB(InputStream inputStream, 
    OutputStream outputStream) throws IOException {
    //---copy 1K bytes at a time---
    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) > 0) {
        outputStream.write(buffer, 0, length);
    }
    inputStream.close();
    outputStream.close();
}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.famous_person, menu);
        return true;
    }

    public void DisplayContact(Cursor c)
    {
        Toast.makeText(this,
                "id: " + c.getString(0) + "\n" +
                "Name: " + c.getString(1) + "\n" +
                "Email:  " + c.getString(2),
                Toast.LENGTH_LONG).show();
    }
}

これはスタック トレースです。これが完全に正しいかどうかはわかりません

ここに画像の説明を入力

4

1 に答える 1