일단 제가 만들려고 하는 것이 첫번쨰 화면에 검색창을 뛰우고 단어를 입력해서 검색을 했을때 두번째 액티비티에서 그 검색 결과를 리스트로 보여주는 것입니다. 코드는 문제없이 통과가 되는데 실제로 구현해보면 검색 버튼을 눌렀을 때 "예상치 않게 종료되었습니다."라고 뜹니다. 여기저기 주석처리를 해서 알아봤는데
Cursor cursor = DatabaseHelper.queryMasterTable(strSearchQuery) 부분에 문제가 있는 것 같습니다.
하루동안 고민했는데 전혀 모르겠습니다. 제발 도와주세요~~~
(처음 액티비티에서 다음 액티비티로 정보를 보내는 과정이 맞는 건지도 의심이 갑니다.)
이것은 첫번째 액티비티
public class MainActivity extends Activity {
public static final String TAG = "DictionaryInfoView";
EditText editSearch;
DataListView listView;
IconTextListAdapter adapter;
Button btnSearch;
String strSearch;
InputMethodManager imm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
editSearch = (EditText) findViewById(R.id.editText);
btnSearch = (Button) findViewById(R.id.searchView);
btnSearch.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
strSearch = editSearch.getText().toString();
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("strSearch",strSearch.length());
startActivity(intent);
}
});
};
}
이것은 두번째 액티비티
public class SecondActivity extends Activity {
public static final String TAG = "SecondActivity";
DataListView listView;
IconTextListAdapter adapter;
InputMethodManager imm;
String strSearch2;
String strSearchQuery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
Intent intent = getIntent();
strSearch2 = intent.getStringExtra("strSearch");
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
adapter = new IconTextListAdapter(this);
listView = new DataListView(this);
LinearLayout linLayout = (LinearLayout) findViewById(R.id.LayoutDicList);
linLayout.addView(listView);
strSearchQuery = strSearch2.concat("%");
DatabaseHelper.openDatabase(DatabaseHelper.wordDatabaseFile);
Cursor cursor = DatabaseHelper.queryMasterTable(strSearchQuery);
AddCursorData(cursor);
listView.setAdapter(adapter);
listView.setOnDataSelectionListener( new OnDataSelectionListener () {
public void onDataSelected(AdapterView parent, View v, int position, long id) {
IconTextItem selectItem = (IconTextItem)adapter.getItem(position);
Bundle bundle = new Bundle();
bundle.putString("data0", selectItem.getData(0));
bundle.putString("data1", selectItem.getData(1));
Intent intent = new Intent( getApplicationContext(), DetailActivity.class );
intent.putExtras(bundle);
startActivity ( intent );
}
});
}
protected void onDestroy() {
super.onDestroy();
DatabaseHelper.closeDatabase();
}
public void AddCursorData ( Cursor outCursor ) {
int recordCount = outCursor.getCount();
println("cursor count : " + recordCount + "\n");
adapter.clear();
int clasFromCol = outCursor.getColumnIndex("CLASFROM");
int clasSoutCol = outCursor.getColumnIndex("CLASSOUT");
Resources res = getResources();
for (int i = 0; i < recordCount; i++) {
outCursor.moveToNext();
String clasFrom = outCursor.getString(clasFromCol);
String clasSout = outCursor.getString(clasSoutCol);
adapter.addItem(new IconTextItem(res.getDrawable(R.drawable.capsule1),clasSout,clasFrom));
}
outCursor.close();
}
public void println(String msg) {
Log.d(TAG, msg);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
이것은 mastertable 부분
public static Cursor queryMasterTable(String strSearchWord ) {
String aSQL = "select WORDFROM, WORDNAME, CLASFROM, CLASSOUT "
+ " from MASTER"
+ " where CLASSOUT like ?";
String[] args = {strSearchWord};
Cursor outCursor = db.rawQuery(aSQL, args);
return (outCursor);
}