일단 작업중인 내용을 말씀 드리겠습니다.
Db에 저장된 내용들을 일단 item이라는 클래스에 하나하나 저장한뒤
ArrayList로 묶었습니다. 그다음 ArrayListAdapter 을 이용하여
하나하나 뿌려 주는 도중.. 프로그램이 피를토하면서 죽어버리네요..ㅠㅠ
일단 로그캣은 저러하구요..
12-16 02:22:25.477: W/dalvikvm(2299): threadid=1: thread exiting with uncaught exception (group=0x40015560) 12-16 02:22:25.497: E/AndroidRuntime(2299): FATAL EXCEPTION: main 12-16 02:22:25.497: E/AndroidRuntime(2299): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.ListView.setupChild(ListView.java:1779) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.ListView.makeAndAddView(ListView.java:1748) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.ListView.fillDown(ListView.java:670) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.ListView.fillFromTop(ListView.java:727) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.ListView.layoutChildren(ListView.java:1598) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.AbsListView.onLayout(AbsListView.java:1260) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.view.View.layout(View.java:7175) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1243) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.LinearLayout.onLayout(LinearLayout.java:1049) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.view.View.layout(View.java:7175) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.view.View.layout(View.java:7175) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.view.View.layout(View.java:7175) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.view.View.layout(View.java:7175) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.os.Handler.dispatchMessage(Handler.java:99) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.os.Looper.loop(Looper.java:123) 12-16 02:22:25.497: E/AndroidRuntime(2299): at android.app.ActivityThread.main(ActivityThread.java:3683) 12-16 02:22:25.497: E/AndroidRuntime(2299): at java.lang.reflect.Method.invokeNative(Native Method) 12-16 02:22:25.497: E/AndroidRuntime(2299): at java.lang.reflect.Method.invoke(Method.java:507) 12-16 02:22:25.497: E/AndroidRuntime(2299): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 12-16 02:22:25.497: E/AndroidRuntime(2299): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 12-16 02:22:25.497: E/AndroidRuntime(2299): at dalvik.system.NativeStart.main(Native Method)
소스코드는
class MyListAdapter extends ArrayAdapter<Object>{
Activity act;
int resource;
Object [] obj;
public MyListAdapter(Context context, int resource,
int textViewResourceId, Object[] objects) {
super(context, resource, textViewResourceId, objects);
act = (Activity)context;
obj = objects;
this.resource = resource;
Log.i("여기입니다.", "MyListAdapter 생성자 불려졌음");
}
public View getView(int position, View convertView, ViewGroup parent){
Log.i("여기입니다.", "getView 진입!");
LayoutInflater inf = (MainActivity.this).getLayoutInflater();
View view = inf.inflate(R.layout.list_row, null);
ImageView img = (ImageView)view.findViewById(R.id.mListImage);
String imgurl = item.get(position).getImg_num();
Log.i("여기입니다.", "imgul 날린다!!");
// int idx = imgurl.lastIndexOf('/');
// String imglocal = imgurl.substring(idx+1);
String path = Environment.getDataDirectory().getAbsolutePath();
path += "/data/hkIT.lth.kwh.lure/imgfiles/"+imgurl;
Log.i("여기입니다.", "imgul 받았음!");
Log.i("여기입니다.", "setImg");
Bitmap bitmap = BitmapFactory.decodeFile(path);
img.setImageBitmap(bitmap);
Log.i("여기입니다.", "setTitle");
TextView setTitle = (TextView)view.findViewById(R.id.mFishName);
setTitle.setTag(item.get(position).getName());
Log.i("여기입니다.", "setLocation");
TextView setLocation = (TextView)view.findViewById(R.id.mFishLocation);
setLocation.setText(item.get(position).getLocation());
Log.i("여기입니다.", "setSeason");
TextView setSeason = (TextView)view.findViewById(R.id.mFishSeason);
setSeason.setText(item.get(position).getSeason());
Log.i("여기입니다.", "return");
return Mainlist;
}그리고 리스트가 뿌려질 액티비티의 xml 파일
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/list"/>
</LinearLayout>리스트를 구성할때 사용되어진 list_row 입니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView android:src="@drawable/c_tkacl"
android:layout_width="100dp"
android:layout_height="80dp"
android:id="@+id/mListImage"
android:layout_margin="5px"/>
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:layout_marginTop="10px"
android:layout_marginBottom="5px"
android:layout_marginLeft="5px">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="5px"
android:layout_marginBottom="5px">
<TextView
android:layout_width="60px"
android:layout_height="wrap_content"
android:text="이 름 :"
android:textSize="16sp"
android:ellipsize="end"
android:lines="1"
android:textColor="#ff0000"/>
<TextView android:id="@+id/mFishName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="삼치"
android:textSize="16sp"
android:ellipsize="end"
android:lines="1"
android:textColor="#ff0000"/>
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="60px"
android:layout_height="wrap_content"
android:text="지 역 :"
android:ellipsize="end"
android:lines="1"
android:textSize="16sp"/>
<TextView android:id="@+id/mFishLocation"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="동해, 서해, 남해, 제주도"
android:ellipsize="end"
android:lines="1"
/>
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="60px"
android:layout_height="wrap_content"
android:text="시 즌 :"
android:ellipsize="end"
android:lines="1"
android:textSize="16sp"/>
<TextView android:id="@+id/mFishSeason"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
android:ellipsize="end"
android:lines="1"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
어디서 잘못된걸까요..;;
로그캣 보는데 익숙해졌다고 생각했는데..
으앜이네요..ㅠㅠ
음.. 코드가 길어서 집중이 잘 안되긴 하지만...
일단 getView메서드에서 View타입을 리턴하셔야하는데. Mainlist를 리턴하시네요?
Mainlist에 대한 정의는 없는 것 같은데 말이죠...
위 상황에서라면 View view = inf.inflate(R.layout.list_row, null); 해당 코드가 list에 뿌려질 아이템layout같은데..
return view로 해보세요..
추가적으로... listView에 있는 adapter는 스크롤이라든지, 데이터 등에 따라서, getView가 무수히 호출이 되는데..
이때마다 계속 R.layout.list_row를 inflate하시면 시간 소요가 큽니다...
이 때 getView에 파라미터로 넘어오는 convertView라는 것을 재활용하셔서 사용하시면.. 좀 더 효율적인 프로그램을 만드실 수 있겠네요^^..
convertView == null 일 경우에만 infalte하시고, null이 아니시라면 convertView자체가 이전에 사용된 R.layout.list_row를 가지고 있기 때문에
그대로 convertView.findViewById(~~~)이렇게 사용하시면 됩니다.




아아.. 추가로.. imgurl 에 저장된 내용은 파일이름.png 입니다..
경로는 소스코드에서 보시듯이 저러하구요..;
혹시 파일이름.png 요거를 빼야하나요?