마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

DB에있는 내용을 검색을통해 보여주는 방법 문의

0 추천
package com.romen.CancerAdvice;

public class search_activity extends ListActivity {
 public SQLiteDatabase db;
 public Cursor cursor;
 public SimpleCursorAdapter Adapter=null;
 public SimpleCursorAdapter Adapterseoul=null;
 public SimpleCursorAdapter Adaptergyeonggi=null;
 public SimpleCursorAdapter Adaptergangwon=null;
 public SimpleCursorAdapter Adapterjeolla=null;
 public SimpleCursorAdapter Adaptergyeongsang=null;
 public static final String ROOT_DIR = "/data/data/com.romen.CancerAdvice/databases/";
 ProductDBHelper mHelper;
 private String searchKeyword;
   
 

 public void setDB() {
    File folder = new File(ROOT_DIR);
    if(folder.exists()) {
    
    }
    else {
     folder.mkdirs();
     
    }

     AssetManager assetManager = getResources().getAssets();
     File outfile = new File(ROOT_DIR+"kmdc.db");
    
     InputStream is = null; 
       
     FileOutputStream fo = null;
     
     long filesize = 0;
           
           
     try {
      
      is = assetManager.open("kmdc.db", AssetManager.ACCESS_BUFFER);  
       filesize = is.available();
       
    
       if (outfile.length() <= 0) {
       byte[] tempdata = new byte[(int) filesize];
       is.read(tempdata); 
       is.close(); 
       outfile.createNewFile();
       fo = new FileOutputStream(outfile);
       fo.write(tempdata);
       fo.close();    
      }
       else
       {
        
       
       }
     } catch (IOException e) { 
     Toast.makeText(this, "db이동실패", Toast.LENGTH_LONG).show();
     }   
    }

 
 /** Called when the activity is first created. */
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.search_activity);
     
     EditText searchBox = (EditText) findViewById(R.id.EditText01);

  try {
   searchBox.addTextChangedListener(new TextWatcher() {

    public void afterTextChanged(Editable arg0) {
     // ignore
    }

    public void beforeTextChanged(CharSequence s, int start,
      int count, int after) {
     // ignore
    }

    public void onTextChanged(CharSequence s, int start,
      int before, int count) {

     try {
      searchKeyword = s.toString();
      displayList();
     } catch (Exception e) {
      Log.e("", e.getMessage(), e);
     }
    }

   });

   displayList();
  } catch (Exception e) {
   Log.e("", e.getMessage(), e);
  }
 }
     
 private List<Contact> getContactsList() throws Exception {

  List<Contact> contactsList = new ArrayList<Contact>();

  String[] projection = new String[] { Contacts.People._ID,
    Contacts.People.NAME, Contacts.People.NUMBER };

  Cursor cursor = managedQuery(Contacts.People.CONTENT_URI, projection,
    null, null, null);

  while (cursor.moveToNext()) {
   addContact(contactsList, cursor.getString(1), cursor.getString(2));
  }

  return contactsList;
 }

 private void addContact(List<Contact> contactsList, String name,
   String number) throws Exception {

  if (contactsList == null) {
   throw new NullPointerException("contactList가 null 입니다.");
  }

  boolean isAdd = false;

  if (searchKeyword != null && "".equals(searchKeyword.trim()) == false) {

   String iniName = HangulUtils.getHangulInitialSound(name,
     searchKeyword);

   if (iniName.indexOf(searchKeyword) >= 0) {
    isAdd = true;
   }
  } else {
   isAdd = true;
  }

  if (isAdd) {
   contactsList.add(new Contact(name, number));
  }
 }
     
 private void displayList() throws Exception {

  List<Contact> contactsList = null;

  contactsList = getContactsList();

  ContactsListAdapter<Contact> adapter = new ContactsListAdapter<Contact>(
    this, R.layout.searchlist_row, contactsList);
  setListAdapter(adapter);
 }
     
 private class ContactsListAdapter<T extends Contact> extends
 ArrayAdapter<T> {

private List<T> contactsList;

public ContactsListAdapter(Context context, int textViewResourceId,
  List<T> items) {
 super(context, textViewResourceId, items);
 contactsList = items;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
 View view = convertView;
 if (view == null) {
  LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  view = vi.inflate(R.layout.searchlist_row, null);
 }

 T contacts = contactsList.get(position);
 if (contacts != null) {
  TextView viewName = (TextView) view.findViewById(R.id.toptext);
  if (viewName != null) {
   viewName.setText(contacts.getName());
  }

  TextView viewNumber = (TextView) view
    .findViewById(R.id.bottomtext);
  if (viewNumber != null) {
   viewNumber.setText("전화번호 : " + contacts.getNumber());
  }
 }

 return view;
}
}    // TODO Auto-generated method stub
 }

안드로이드 펍 게시글중 초성검색 어플을 보고 edittext에 검색어를 쓰고 listview에 뿌려주는것을 만들고싶습니다

게시글에 올라온것은 연락처를 검색할수 있게 한거였는데, 저는 assets에 있는 db를 이용해 그 db안에 있는 내용을 검색하게 하고싶습니다.

무지한 지식에 도전하려니 많이 어렵습니다. 하지만 시간이 급해 이렇게 고수님들게 문의 드립니다.

제가 가지고 있는 db를가지고 사용하려면 어떤부분을 수정해야할지 잘 모르겠습니다.

답변 부탁드립니다!!

jinw0o0 (200 포인트) 님이 2014년 6월 16일 질문

2개의 답변

0 추천
1. DB복사
 
asset폴더에있는 용량이조금 되는 DB파일을 내부저장소에다가 저장하려면 메인스레드에서 작업하면안됩니다.
 
별도의 백그라운드Thread를하나생성해서 output작업을해주셔야됩니다.
 
 
 
2. 정확히 어디가 문제가있다는거죠..??
 
질문 내용이 너무 추상적입니다. asset폴더에 db파일을 내부저장소에다가 저장하는데 저장이안되는건지..
 
query를 날려서 데이터를 얻는것이 문제인건지..
 
데이터를 어댑터에꼽아서 ListView에 보여주는것이 문제인건지..
 
상세하게좀 알려주세요~
 
whdrb19 (23,520 포인트) 님이 2014년 6월 16일 답변
edittext에 검색어를 넣으면 그 검색어에 해당하는 내용을 listview에 나오게 해주고싶습니다. 예를 들어 '무한' 이라고 치면 무한상사 무한도전 무한궤도   이런식으로 listview에 나오게 하고싶은데 어떻게 해야할지를 모르겠습니다 ㅠ
0 추천
그럼 일단 첫번째로 DB의 데이터들을 ListView에 뿌리는 것부터 하시구요.
전 부터 글쓰신거 보니 각 지역별로 뭔가를 검색하시려는거같은데.. 일단 ListView에 띄우시는것부터..
그리고 두번째로 searchBox에 입력된 값으로 ListView에서 조회하는거죠,
저도 전화번호부 예제 활용해서 만들었는데, onTextChanged 이부분에서 검색된 결과를 listview에 띄워줘야 합니다.
저 역시 예제 보고 만든 초보자라 이게 정석이다 라고 장담은 못하는데, 어쨌든 검색결과는 나오네요.
기존의 db 어레이리스트와는 다른 검색결과 어레이 리스트를 따로 만들어서, 검색결과를 담아서 뿌려줬습니다.
 
 
anci (19,950 포인트) 님이 2014년 6월 16일 답변
anci님이 2014년 6월 16일 수정
...