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

AUIL 사용해서 이미지를 가져 오려고 합니다..

0 추천

몇일동안 구글링 해보고 

helloworld.naver.com/helloworld/429368

https://github.com/nostra13/Android-Universal-Image-Loader

이 두곳을 기초로 제가 만들고 있는 어플에 적용 해보려고 하는데 너무 안되네요....

class MyListAdapter extends BaseAdapter {
	
	DisplayImageOptions options = new DisplayImageOptions.Builder()
	.showImageOnLoading(R.drawable.ic_stub)
	.showImageForEmptyUri(R.drawable.ic_empty)
	.showImageOnFail(R.drawable.ic_error)
	.cacheInMemory(true)
	.cacheOnDisc(true)
	.considerExifParams(true)
	.displayer(new RoundedBitmapDisplayer(20))
	.build();
	
	private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();
	Context maincon;
	LayoutInflater Inflater;
	ArrayList<MyItem> arSrc;
	int layout;

	public MyListAdapter(Context context, int alayout, ArrayList<MyItem> aarSrc) {
		maincon = context;
		Inflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		arSrc = aarSrc;
		layout = alayout;
	}

	public int getCount() {
		return arSrc.size();
	}

	public String getItem(int position) {
		return arSrc.get(position).ShopName;
	}

	public long getItemId(int position) {
		return position;
	}

	// 전체업소목록에 필요한 이미지뷰1,텍스트뷰3개 등록
	public View getView(int position, View convertView, ViewGroup parent) {
		if (convertView == null) {
			convertView = Inflater.inflate(layout, parent, false);
		}
		ImageView img = (ImageView) convertView.findViewById(R.id.img_listpic);
		//img.setImageBitmap(arSrc.get(position).Icon);
		

		TextView sn = (TextView) convertView.findViewById(R.id.shopname);
		sn.setText(arSrc.get(position).ShopName);

		TextView loc = (TextView) convertView.findViewById(R.id.locate);
		loc.setText(arSrc.get(position).Locate);

		RatingBar rt = (RatingBar) convertView.findViewById(R.id.rating);

		rt.setRating(arSrc.get(position).Star);

		TextView star = (TextView) convertView.findViewById(R.id.star);
		star.setText("(" + arSrc.get(position).Star + ")");
		
		AbsListViewBaseActivity.imageLoader.displayImage(arSrc.get(position).Icon , img, options, animateFirstListener);
		
		return convertView;
	}
}

이런식으로 적용하고

all = new MyItem(shopimageUrls, stname, stloc, star, storeid);
arItem.add(all);

이렇게 for문을 돌면서 url 읽어오면서 사용하려고 합니다..

근데 config를 할 곳이 마땅치 않아서

public class AbsListViewBaseActivity extends Activity {
	
	public static ImageLoader imageLoader = ImageLoader.getInstance();
	
	protected static final String STATE_PAUSE_ON_SCROLL = "STATE_PAUSE_ON_SCROLL";
	protected static final String STATE_PAUSE_ON_FLING = "STATE_PAUSE_ON_FLING";

	protected AbsListView listView;

	protected boolean pauseOnScroll = false;
	protected boolean pauseOnFling = true;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		initImageLoader(getApplicationContext());
	}
	
	@Override
	public void onRestoreInstanceState(Bundle savedInstanceState) {
		pauseOnScroll = savedInstanceState.getBoolean(STATE_PAUSE_ON_SCROLL, false);
		pauseOnFling = savedInstanceState.getBoolean(STATE_PAUSE_ON_FLING, true);
	}

	@Override
	public void onResume() {
		super.onResume();
		initImageLoader(getApplicationContext());
		applyScrollListener();
	}

	private void applyScrollListener() {
		listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
	}

	@Override
	public void onSaveInstanceState(Bundle outState) {
		outState.putBoolean(STATE_PAUSE_ON_SCROLL, pauseOnScroll);
		outState.putBoolean(STATE_PAUSE_ON_FLING, pauseOnFling);
	}
	
	public static void initImageLoader(Context context) {
		// This configuration tuning is custom. You can tune every option, you may tune some of them,
		// or you can create default configuration by
		//  ImageLoaderConfiguration.createDefault(this);
		// method.
		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
				.threadPriority(Thread.NORM_PRIORITY - 2)
				.denyCacheImageMultipleSizesInMemory()
				.discCacheFileNameGenerator(new Md5FileNameGenerator())
				.tasksProcessingOrder(QueueProcessingType.LIFO)
				.writeDebugLogs() // Remove for release app
				.build();
		// Initialize ImageLoader with configuration.
		ImageLoader.getInstance().init(config);
	}
}

이런식으로 했는데 config는 진행 된거 같은데

listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));

여기랑

applyScrollListener();

이곳에서 nullpointer 오료가 생기네요...

도대체 어디 부분을 사용해야 하는지... 어느곳에서 적용시켜야 할지 소스를 계속 보고 또봐도 모르겠네요...

어디 부분이 잘못된 걸까요...

익명사용자 님이 2014년 3월 31일 질문

1개의 답변

+1 추천
AUIL라이브러리쓰시면서...아주아주 기본적인부분을 놓치고있으시네요
 
 
로그찍는법부터 보셔야할거같습니다.
 
 
첫번째는 listview에서 메모리생성을 안해주어서 메모리를 못찾겠다~~해서 nullpointexception이 나는거구요
 
 
두번째도 동일합니다.
 
 
해결방법은 listview = (ListView)findViewId(ListView Xml아이디)넣어주시면됩니다.
 
 
 
 
 
 
 
 
 
 
whdrb19 (23,520 포인트) 님이 2014년 3월 31일 답변
예제 소스를 적용하면서 그부분은 미처 보지 못했던것 같네요...
우선 내일 다시 해봐야 할 것 같습니다..
그리고 AUIL에 대해 설명해 놓은 사이트나 블로그가 있을까요??
역시 제가 참고했던 사이트가 대부분이겠죠...?
ListView AllshopList = (ListView) findViewById(R.id.list_allshop);
이런식으로 해 놓았는데도 오류가 나는 거였는데 다른 부분이 잘못된건가요..?
ListView AllshopList = (ListView) findViewById(R.id.list_allshop);
이런식으로 해놓아도..에러가나는부분이면 다음라인에
 Log.v("test", AllshopList); 를찍어서 null이뜨는지 보시면 알수있습니다
...