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

주소록 불러와 체크박스 생성 중에 문제가 생깁니다.

0 추천

주소록을 불러오는 것만 했을 때는 문제없이 실행이 되는데

옆에 체크박스 생성을 하려고 하는데

어플리케이션 실행이 안됩니다ㅠㅠ

뭐가 문제일까요?ㅠ

 

//ListActivity 코드
import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

import com.eos.addressbook.R;
import com.eos.addressbook.data.Address;

public class ListAdapter extends ArrayAdapter<Address> {
	private LayoutInflater mInflater;
	/*private TextView name, phoneNum;
	private CheckBox check;*/

	public ListAdapter(Context context, ArrayList<Address> object) {
		super(context, 0, object);
		// TODO Auto-generated constructor stub

		mInflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

	private class ViewHolder {
		TextView name, phoneNum;
		CheckBox check;
	}
	
	@Override
	public View getView(int position, View v, ViewGroup parent) {
		View view = null;
		ViewHolder holder = null;

		if (v == null) {
			view = mInflater.inflate(R.layout.custom_view, null);
			holder = new ViewHolder();
			
			holder.name = (TextView) view.findViewById(R.id.Name);
			holder.phoneNum = (TextView) view.findViewById(R.id.PhoneNum);
			holder.check = (CheckBox) view.findViewById(R.id.checkbox);
			
			
			view.setTag(holder);
		} else {
			view = v;
			holder = (ViewHolder)v.getTag();
		}

		final Address data = this.getItem(position);
		holder.check.setId(position);

		if (data != null) {
			holder.name.setText(data.getName());
			holder.phoneNum.setText(data.getPhoneNum());
			holder.check.setChecked(((ListView)parent).isItemChecked(position));
			holder.check.setFocusable(false);
			holder.check.setClickable(false);

			holder.check.setChecked(data.getCheck());

			if (data.getCheck()) {
				holder.check.toggle();
			}

		}
		// TODO Auto-generated method stub
		return view;

	}

}
//ListAdapter 코드

import java.util.ArrayList;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.Toast;

import com.eos.addressbook.adapter.ListAdapter;
import com.eos.addressbook.data.Address;

public class ListActivity extends Activity {
	private ListView dataList;
	private ArrayList<Address> data;
	private ListAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_list);

		data = new ArrayList<Address>();

		dataList = (ListView) findViewById(R.id.dataList);

		ContentResolver cr = getContentResolver();

		Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null,
				null, null);

		while (c.moveToNext()) {
			Address tmp = new Address();
			String hasPhoneNum;
			String id = c.getString(c
					.getColumnIndex(ContactsContract.Contacts._ID));

			tmp.setName(c.getString(c
					.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)));
			hasPhoneNum = c
					.getString(c
							.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));

			if (hasPhoneNum.equals("1")) {
				Cursor phones = getContentResolver().query(
						ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
						null,
						ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="
								+ id, null, null);

				while (phones.moveToNext()) {
					tmp.setPhoneNum(phones.getString(phones
							.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));

				}
				phones.close();
				tmp.setCheck(false);

				data.add(tmp);
			}
		}
		
		adapter = new ListAdapter(this, data);
		
		dataList.setAdapter(adapter);
		dataList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		
		/*dataList.setOnItemClickListener(new OnItemClickListener(){
			@Override
			public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3){
				CheckBox chk = (CheckBox)v.findViewById(R.id.Check);
				Address chk = (Address)arg0.getAdapter().getItem(position);
				//data.get(position).setCheck();
				if(data.get(position).getName().equals(chk.getName())){
					Toast.makeText(getApplicationContext(), "equals", Toast.LENGTH_LONG).show();
				}
				
				data.get(position).setCheck(true);
				//chk.toggle();
				
				
			}
		});*/

	}
}

 

}
}
 

 

익명사용자 님이 2014년 10월 29일 질문

1개의 답변

0 추천
hasPhoneNum 변수나

phones 변수에 Null에러가 나는거같은데요~
whdrb19 (23,520 포인트) 님이 2014년 10월 29일 답변
체크박스를 생성하려는 코드를 넣기 전에는 문제없이 전화번호 리스트를 잘 가져왔는데 왜갑자기 거기에서 에러가 발생하는걸까요.......
일단 DDMS에서 에러가난라인을 더블클릭해서 디버깅 or Log를 찍어보시길바랍니다~ 어디서 nullpointer가 나는지요~

제가 몇라인에 에러가난다라는게 표시가안나와서 딱히 드릴말씀이없습니다...
...