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

sqlite에 이미지경로 저장 후 리스트뷰에서 해당 이미지 불러오는 방법 질문 드려요~

0 추천

원하는 꼴은 리스트뷰에 각 리스트마다 해당 리스트의 이미지, 텍스트를 출력하는 것입니다.

(리스트마다 다른 이미지, 다른 텍스트 출력)

 

현재 sqlite에 데이터 저장 후 리스트뷰액티비티인 ListActivity에서 sqlite 값을 배열에 저장,

배열 값을 adapter로 보내어 리스트뷰에 이미지와 텍스트 값을 출력하려고 하는데요.

 

sqlite 값을 배열로 저장할 때 배열이 문자열 배열이어서 이미지 경로를 int로 저장하지 못하네요.

adapter로 출력할 때 이미지경로가 int로 되어 있어야 이미지를 찾아서 출력할 수 있는데 해결방법 아시는 분

답변 좀 부탁드립니다. !

 

ListActivity.java 

		//데이터베이스 및 테이블 open
		MainActivity_SQLiteHandler handler = MainActivity_SQLiteHandler.open(getApplicationContext());
		
		//테이블 선택
		Cursor c = handler.select();
		
		c.moveToLast();						//전체 테이블의 데이터를 세기 위해 커서 c를 테이블의 맨 끝으로 이동
		int rLength = c.getCount();			//현재 row 번호(=전체 row 개수)
		int cLength = c.getColumnCount();	//column 개수
		
		c.moveToFirst();					//전체 테이블 개수를 다 센 후 배열에 데이터를 삽입하기 위해 테이블의 맨 처음으로 이동
		
		String[][] array = new String[rLength][cLength];	//row, column 2차원 배열 생성
		
		for(int i=0; i<rLength; i++) {			//행 길이만큼 반복
			for(int j=0; j<cLength; j++) {		//열 길이만큼 반복
				array[i][j] = c.getString(j);	//반복문 j로 인해 한 행의 모든 column을 배열에 저장
				}
			c.moveToNext();						//다음 행으로 이동
		}
		
		listView = (ListView)findViewById(R.id.listView1);
		
		final ArrayList<ListActivity_CustomDTO> list = new ArrayList<ListActivity_CustomDTO>();
		
		//배열 array의 행 크기만큼 반복하여 데이터 출력
		c.moveToFirst();
		
		for(int i=0; i < array.length; i++) {
			list.add(new ListActivity_CustomDTO(R.drawable.canada, array[i][4], array[i][1], array[i][8], array[i][7]));
			c.moveToNext();
		}
		
		//데이터베이스 및 테이블 close. 데이터베이스는 데이터베이스와 동일한 배열 array를 만들 때와 조건검색 이후 배열 list를 만들 때 사용
		handler.close();
		
		//데이터를 어뎁터에 세팅
		ListActivity_CustomAdapter adapter = new ListActivity_CustomAdapter(
												getApplicationContext(),
												R.layout.activity_list_row,
												list);
		//리스트 뷰에 어뎁터 세팅
		listView.setAdapter(adapter);

 

ListActivity_CustomAdapter.java (어뎁터)

package com.example.zlasearchtest1;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ListActivity_CustomAdapter extends BaseAdapter {
	
	Context ctx;
	int layout;
	ArrayList<ListActivity_CustomDTO> list;
	LayoutInflater inf;
	
	public ListActivity_CustomAdapter(Context ctx, int layout, ArrayList<ListActivity_CustomDTO> list) {
		
		this.ctx = ctx;
		this.layout = layout;
		this.list = list;
		
		inf = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}
	
	//ListView에서 보여줄 데이터의 개수 지정
	@Override
	public int getCount() {
		return list.size();
	}
	
	//ListView에서 보여줄 객체 지정. getCount()값에 의해서 position 값이 동적으로 변경
	//ex. getCount() 값이 3이면 position 값은 0, 1, 2로 설정되어 getItem 메소드가 3번 수행됨
	@Override
	public Object getItem(int position) {
		return list.get(position);
	}

	//getItem(position) 메소드가 리턴한 객체의 고유 식별값
	//일반적으로 position 값도 고유값이기 때문에 position으로 지정
	@Override
	public long getItemId(int position) {
		return position;
	}
	
	//실제 행(row)을 보여주는 뷰를 생성하는 메소드
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		
		//inflate 메소드를 사용하여 list_row.xml을 View 객체로 변경
		if(convertView == null) {
			convertView = inf.inflate(layout, null);
		}
		
		//converView 변수를 이용해서 list_row.xml에 지정한 위젯 참조
		ImageView imgIcon 	= (ImageView)convertView.findViewById(R.id.imgIcon);
		TextView txtBicycle	= (TextView)convertView.findViewById(R.id.txtBicycle);
		TextView txtBrand	= (TextView)convertView.findViewById(R.id.txtBrand);
		TextView txtFrame	= (TextView)convertView.findViewById(R.id.txtFrame);
		TextView txtPrice	= (TextView)convertView.findViewById(R.id.txtPrice);
		
		ListActivity_CustomDTO dto = list.get(position);
		
		imgIcon.setImageResource(dto.getImgIcon());
		txtBicycle.setText(dto.getBicycle());
		txtBrand.setText(dto.getBrand());
		txtFrame.setText(dto.getFrame());
		txtPrice.setText(dto.getPrice());
		
		return convertView;		
	}
}

 

뿌요뿌요 (1,350 포인트) 님이 2015년 2월 3일 질문

1개의 답변

0 추천
 
채택된 답변
질문을 제가 잘 이해한건지 모르겠지만.

리소스 id  정수형을 sqlite Text 형의 컬럼에 저장했다가 다시 가져와서 이미지뷰에 뿌려 주겠다는 말씀이신가요?
 

그냥 간단하게 저장할때는 String sImgID = Integer.toString(R.drawable.image1);

가져올 때는 int iImgID = Integer.parseInt(db에서 가져온 문자열);
 

이렇게 형변환 하셔서 쓰시면 되지 않나요... 아님 db칼럼을 정수형으로 만드셔도 될텐데..

근데 리소스 id값은 빌드할때 변경 될 가능성이 있지 않나요? 보통 이렇게는 잘 안할것 같은데..
이드로이드 (22,930 포인트) 님이 2015년 2월 3일 답변
뿌요뿌요님이 2015년 2월 5일 채택됨
답변 감사합니다! 구글링으로 자체 해결했어요 ^^;
...