2013-09-06 5 views
0

좋은 하루. 내 프로젝트는 2 가지 작업을 수행하고 있는데 첫 번째 작업은 잘 작동하는 데이터베이스에 데이터를 삽입하는 것이지만 다른 작업에서는 데이터베이스의 데이터 목록 뷰를 표시하려고합니다.데이터베이스와 함께 listviews 사용

로컬 데이터 (예 : 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(); 
    } 
} 

이 완전히 정확한지 잘 모르겠어요, 스택 추적입니다

enter image description here

+1

스택 추적을 너무 지정하십시오. –

+1

Plz 데이터베이스 코드를 게시하십시오. –

+0

게시물 logcat 출력하시기 바랍니다 – user755

답변

0

이 시도 : -

lv.setListAdapter (새 ArrayAdapter와 (MyListActivity를 이.android.R.layout.simple_list_item_1, result));

관련 문제