안드로이드 개발 질문/답변
(글 수 45,052)
04-01 10:11:25.194: WARN/dalvikvm(613): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-01 10:11:25.215: ERROR/AndroidRuntime(613): Uncaught handler: thread main exiting due to uncaught exception
04-01 10:11:25.356: ERROR/AndroidRuntime(613): java.lang.NullPointerException
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.AbsListView.obtainView(AbsListView.java:1274)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ListView.makeAndAddView(ListView.java:1668)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ListView.fillDown(ListView.java:637)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ListView.fillFromTop(ListView.java:694)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ListView.layoutChildren(ListView.java:1521)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.AbsListView.onLayout(AbsListView.java:1113)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.View.layout(View.java:6830)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.View.layout(View.java:6830)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.View.layout(View.java:6830)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.View.layout(View.java:6830)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.ViewRoot.performTraversals(ViewRoot.java:996)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.os.Handler.dispatchMessage(Handler.java:99)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.os.Looper.loop(Looper.java:123)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at java.lang.reflect.Method.invokeNative(Native Method)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at java.lang.reflect.Method.invoke(Method.java:521)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at dalvik.system.NativeStart.main(Native Method)
여기까지 에러내용입니다 ㅠㅠ
뭐가 잘못인지 모르겠어요..
에러는 분명
알려주세요
04-01 10:11:25.215: ERROR/AndroidRuntime(613): Uncaught handler: thread main exiting due to uncaught exception
04-01 10:11:25.356: ERROR/AndroidRuntime(613): java.lang.NullPointerException
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.AbsListView.obtainView(AbsListView.java:1274)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ListView.makeAndAddView(ListView.java:1668)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ListView.fillDown(ListView.java:637)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ListView.fillFromTop(ListView.java:694)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.ListView.layoutChildren(ListView.java:1521)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.AbsListView.onLayout(AbsListView.java:1113)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.View.layout(View.java:6830)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.View.layout(View.java:6830)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.View.layout(View.java:6830)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.View.layout(View.java:6830)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.ViewRoot.performTraversals(ViewRoot.java:996)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.os.Handler.dispatchMessage(Handler.java:99)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.os.Looper.loop(Looper.java:123)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at java.lang.reflect.Method.invokeNative(Native Method)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at java.lang.reflect.Method.invoke(Method.java:521)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-01 10:11:25.356: ERROR/AndroidRuntime(613): at dalvik.system.NativeStart.main(Native Method)
여기까지 에러내용입니다 ㅠㅠ
뭐가 잘못인지 모르겠어요..
에러는 분명
listView.setOnItemClickListener(new OnItemClickListener(){
즉.. 리스너가 실행되기 전에 난건대요.
그럼 화면에라도 목록을 출력해야 하는데 그렇지 않아요 ㅠㅠ알려주세요
C:\Android\workspace\SosAndroid\src\com\sos\android\CallContacts
package com.sos.android;
C:\Android\workspace\SosAndroid\src\com\sos\android\CallContacts
import android.app.ListActivity; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView;
C:\Android\workspace\SosAndroid\src\com\sos\android\CallContacts
public class CallContacts extends ListActivity {
public static final int CONTACT = 1;
public ContactsDbAdapter Contacts_DB;
String tag = null;
int rowId;
String contact_name;
String ContactId;
Cursor phones;
Cursor db_cursor;
String contact_number;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//DB 열기
Contacts_DB = new ContactsDbAdapter(this);
Contacts_DB.open();
db_cursor = Contacts_DB.getNumber();
final Cursor cursor = getURI(); // 전화번호부 가져오기
int end = cursor.getCount(); // 전화번호부의 갯수 세기
Log.d(tag, "end = "+end);
C:\Android\workspace\SosAndroid\src\com\sos\android\CallContacts
String [] name = new String[end]; // 전화번호부의 이름을 저장할 배열 선언
int count = 0;
int db_count = 0;
int db_end = db_cursor.getCount();
boolean isfirst_cursor = false;
Log.d(tag, "end = "+db_end);
db_cursor.moveToFirst();
isfirst_cursor = cursor.moveToFirst();
String save1 = NumberQuery(cursor);
String save2 = Db_Number(db_cursor);
if(isfirst_cursor){
while(end > count){
Log.d(tag, "end = "+end +","+ count);
while(db_end > db_count){
if( !save1.equals(save2)){
db_count++;
Log.d(tag, "end = "+save1 +","+ save2+db_count);
if(db_end > db_count){
db_cursor.moveToNext();
}
save2 = Db_Number(db_cursor);
if(db_end == db_count){
Log.d(tag, "end = "+db_end +","+db_count );
// 컬럼명으로 컬럼 인덱스 찾기
int idIndex = cursor.getColumnIndex("_id");
// 요소값 얻기
int id = cursor.getInt(idIndex);
name[count] = cursor.getString(1);
// LogCat에 로그 남기기
Log.d(tag, "id=" + id +", name["+count+"]=" + name[count]);
count++;
db_count = 0;
db_cursor.moveToFirst();
save2 = Db_Number(db_cursor);
if(end > count){
cursor.moveToNext();
}
save1 = NumberQuery(cursor);
}
}
else{
Log.d(tag,"id=" + save1);
db_cursor.moveToFirst();
save2 = Db_Number(db_cursor);
count++;
if(end > count){
db_count = 0;
cursor.moveToNext();
save1 = NumberQuery(cursor);
}
else{
db_count = db_end;
C:\Android\workspace\SosAndroid\src\com\sos\android\CallContacts
}
}
}// second while end
}
}
final ListView listView = getListView();
listView.setItemsCanFocus(false);
setListAdapter(
new ArrayAdapter<String>(this, R.layout.callcontacts, android.R.id.text1, name));
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setOnItemClickListener(new OnItemClickListener(){
C:\Android\workspace\SosAndroid\src\com\sos\android\CallContacts
//리스트에서 항목이 하나 선택된다면
public void onItemClick(AdapterView<?> parent, View view, int pos,
long id) {
// TODO Auto-generated method stub
Log.d(tag, "id=");
//커서를 선택한 항목으로 이동시킵니다
cursor.moveToPosition(pos);
Log.d(tag, "id=");
NumberQuery(cursor);
Contacts_DB.insertContacts(contact_name, contact_number);
// URL를 얻어옵니.
//Uri outURI = Uri.parse(people.toString() + rowId);
//선택한 항목에 대한 경로를 지정해서 액티비티에게 리턴합니다.
//Intent outData = new Intent();
//outData.setData(outURI);
//setResult(Activity.RESULT_OK, outData);
//finish();
}
});
}
private Cursor getURI()
{
// 주소록 URI -> android 2.x 이상버젼에서의 URI 접근방법
Uri people = ContactsContract.Contacts.CONTENT_URI;
C:\Android\workspace\SosAndroid\src\com\sos\android\CallContacts
// 검색할 컬럼 정하기
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER };
// 쿼리 날려서 커서 얻기
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
C:\Android\workspace\SosAndroid\src\com\sos\android\CallContacts
return managedQuery(people, projection, null, selectionArgs, sortOrder);
}
public String NumberQuery(Cursor cursor){
//_id를 얻어옵니다.
rowId = cursor.getColumnIndex(ContactsContract.Contacts._ID);
contact_name = cursor.getString(1);
ContactId = cursor.getString(rowId);
phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+ContactId,
null,
null);
//선택한 곳의 값은 "-1"의 값이기에 한칸 커서를 옮깁니다.
phones.moveToNext();
//전화번호를 얻어옵니다.
contact_number = phones
.getString(phones .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
return contact_number;
}
public String Db_Number(Cursor Db_cursor){
String contact_number = null;
contact_number = Db_cursor.getString(0);
return contact_number;
}
}



자답 :
배열관리를 잘 못해서 나타나는 NullPoint 에러였습니다 ^^