한번 올렸는데 아무도 답변을 달아주지 않으셔서;; 다시 한번 올립니다.
디비에 있는 자료를 checkbox가 있는 리스트뷰로 뿌리려고 하고 있습니다.
loadlist()에서는 각 열에 있는 자료들을 additem에 저장해서 마지막에 getview를 통해 뿌릴 생각인데요..
에러가 나버리네요;;
setListAdapter(i_adapter); 이부분에 주석처리를 해버리면 돌아가긴 하는데... 그렇게 하면 아무것도 뜨지 않죠-_-;
어디가 문제인지 잘 모르겠습니다;;
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class PositionTransfer extends ListActivity{
private int max;
String phone_ = "";
String remove_num_string="";
int remove_num_int=0;
public Context mCtx;
int last_id=0;
public ListView addlist;
public CheckBox cb;
int MAX=1000;
public ArrayList<Item> additem = new ArrayList<Item>();
DbAdpater Dbadpater= new DbAdpater(mCtx);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pos);
addlist = getListView();
try{
Dbadpater.mDb = openOrCreateDatabase(Dbadpater.DATABASE_NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);
Dbadpater = new DbAdpater(this);
Dbadpater.open();
Cursor cursor = getEvent();
loadlist(cursor);
}catch(Exception e){
Toast.makeText(PositionTransfer.this,"",Toast.LENGTH_SHORT).show();
System.out.print(e.getMessage()); e.printStackTrace();
}
final Button remove = (Button)findViewById(R.id.pos_remove);
}
public void loadlist(Cursor cursor){
System.gc();
Item[] item = new Item[MAX];
int cnt = 0;
//String[] mcursor = new String[]{Dbadpater.KEY_ROWID, Dbadpater.KEY_LIST};
if(cursor.moveToFirst()){
int id = 0;
String list = null;
int idcolumn = cursor.getColumnIndex("_id");
int listcolumn = cursor.getColumnIndex("list");
do{
int view_id = cursor.getInt(idcolumn);
String view_list = cursor.getString(listcolumn);
item[cnt] = new Item(view_id, view_list);
additem.add(item[cnt]);
cnt++;
}while(cursor.moveToNext());
}
ItemAdapter i_adapter = new ItemAdapter(this, R.layout.listitems, additem);
setListAdapter(i_adapter);
addlist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
class Item {
private int _id;
private String list;
public Item(int _id, String list){
this._id = _id;
this.list = list;
}
public int get_id() {
return _id;
}
public String getlist() {
return list;
}
}
class ItemAdapter extends ArrayAdapter<Item> {
public ArrayList<Item> items;
public CheckBox cb;
public ItemAdapter(Context context, int textViewResourceId, ArrayList<Item> items) {
super(context, textViewResourceId, items);
//Toast.makeText(PositionTransfer.this,"dd",Toast.LENGTH_SHORT).show();
this.items = items;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null){
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listitems, null);
}
Item i = items.get(position);
if(i != null){
TextView _id = (TextView)v.findViewById(R.id.first);
TextView list = (TextView)v.findViewById(R.id.second);
cb = (CheckBox)v.findViewById(R.id.check);
if(_id != null){
_id.setText(i.get_id());
}
if(list != null){
list.setText(i.getlist());
}
}
return v;
}
}
public Cursor getEvent(){
Dbadpater.mDb = Dbadpater.mDbHelper.getReadableDatabase();
Cursor cursor = Dbadpater.mDb.query(Dbadpater.DATABASE_TABLE, Dbadpater.FROM, null,null,null,null, Dbadpater.ORDER_BY);
startManagingCursor(cursor);
return cursor;
}
}
<pos.xml >
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<Button
android:id="@+id/pos_remove"
android:layout_width="59px"
android:layout_height="36px"
android:text="제거"
android:layout_x="115px"
android:layout_y="383px"
>
</Button>
<ListView
android:id="@id/android:list"
android:layout_width="298px"
android:layout_height="270px"
android:layout_x="11px"
android:layout_y="37px"
>
</ListView>
<TextView
android:id="@id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="표시할내용이 없습니다."
android:layout_x="17px"
android:layout_y="43px"
>
</TextView>
<TextView
android:id="@+id/widget68"
android:layout_width="102px"
android:layout_height="wrap_content"
android:text="목록"
android:textSize="15sp"
android:layout_x="101px"
android:layout_y="15px"
>
</TextView>
<TextView
android:id="@+id/widget93"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="번호"
android:layout_x="11px"
android:layout_y="15px"
>
</TextView>
</AbsoluteLayout>
<listview.xml>
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<CheckBox
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBox"
android:layout_x="206px"
android:layout_y="10px"
>
</CheckBox>
<TextView
android:id="@+id/first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="first"
android:layout_x="20px"
android:layout_y="21px"
>
</TextView>
<TextView
android:id="@+id/second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="second"
android:layout_x="114px"
android:layout_y="20px"
>
</TextView>
</AbsoluteLayout>
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): android.content.res.Resources$NotFoundException: String resource ID #0x0
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.content.res.Resources.getText(Resources.java:200)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.TextView.setText(TextView.java:2813)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at db.ok.PositionTransfer$ItemAdapter.getView(PositionTransfer.java:143)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.AbsListView.obtainView(AbsListView.java:1274)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.ListView.makeAndAddView(ListView.java:1668)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.ListView.fillDown(ListView.java:637)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.ListView.fillFromTop(ListView.java:694)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.ListView.layoutChildren(ListView.java:1521)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.AbsListView.onLayout(AbsListView.java:1113)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.view.View.layout(View.java:6831)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.AbsoluteLayout.onLayout(AbsoluteLayout.java:120)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.view.View.layout(View.java:6831)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.view.View.layout(View.java:6831)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.view.View.layout(View.java:6831)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.view.View.layout(View.java:6831)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.view.ViewRoot.performTraversals(ViewRoot.java:995)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.view.ViewRoot.handleMessage(ViewRoot.java:1632)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.os.Handler.dispatchMessage(Handler.java:99)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.os.Looper.loop(Looper.java:123)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at android.app.ActivityThread.main(ActivityThread.java:4310)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at java.lang.reflect.Method.invokeNative(Native Method)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at java.lang.reflect.Method.invoke(Method.java:521)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-14 04:00:37.851: ERROR/AndroidRuntime(1808): at dalvik.system.NativeStart.main(Native Method)
오류 내용입니다.. 제 생각에는 xml에서 뭔가 잘못해준거 같습니다.;;
제대로 알아보려면 소스복사해서 한번 봐야겠지만
일단 눈으로 쭉~ 봤을때 보이는건
ItemAdapter i_adapter = new ItemAdapter(this, R.layout.listitems, additem);
여기에서 layout명이 xml파일 이름이랑 다르네요... layout.listview 가 맞겠죠
가장 무식하면서도 에러난 위치를 찾기에 좋은 방법이 있습니다.
코드 안에서 명령어 사이사이에 System.out.println("#1"); 이런식으로
순서대로 1,2,3,4,5 ...... 이렇게 문장안에 넣으신다음에 돌리시면
만약 println("3") 찍은곳과 println("4")를 찍은곳 사이에 있는 문장에서
에러가 나는거면 3까지만 찍히고 4는 뜨지 않겠죠?
무식하면서도 엄청 찾기 쉬운방법입니다^^;
어떤 종류의 에러가 나는지 알수있을까요?
이클립스를 이용하신다면 Debug에 뜨는 에러종류나 (예: RuntimeError)
에러가 나는 위치에서 Logcat에 뜨는 내용이요
Logcat은 이클립스 오른쪽위에 아마 DDMS라고 아이콘 있을껀데
거기로 들어가시면 Logcat영역이 있습니다.