안녕하세요 문제를 정확히 모르겠어서 질문 드립니다 ㅠ
전체적인 과정은 일단 메인액티비티의 onCreate에서 주소록 추가버튼을 누르면 주소록이 뜨고 거기서 아이템을 클릭해서 이름과 전화번호를 받아오는 형식입니다.
여기서 문제는 onActivityResult (제일 아래에 있습니다) 에서 데이터를 가져온 뒤, 추가적으로 메일을 받아오기 위해서 다이얼로그를 띄워서 메일주소를 받아와서 리스트에 데이터로 함께 추가해 주고 싶은데...
오류가 나네요. 저기쓰여있는 다이얼로그 코드가 onCreate에서는 정상적으로 작동되는데 왜 다른데서는 안되는 걸까요...?
그리고 또 의문인것이... list에 데이터들을 연결해주는 어댑터 함수가 존재하는데, 다이얼로그 위치를 다르게 하니 여기서 오류가 난다고 뜨네요.
10-24 14:43:52.478 13886-13886/com.example.administrator.contacts E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.administrator.contacts, PID: 13886
java.lang.NullPointerException: Attempt to read from field 'android.widget.TextView com.example.administrator.contacts.MyListAdapter$ViewHolder.Name' on a null object reference
at com.example.administrator.contacts.MyListAdapter.getView(MyListAdapter.java:67)
코드는 메인액티비티랑 어댑터클래스 코드 올립니다.
package com.example.administrator.contacts;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private ListView mListView = null;
private MyListAdapter mListAdapter = null;
private ArrayList<list_item> list_itemArrayList;
private Button mButton;
private Context mContext;
String name="조정석", number="010-1234-5678", mail = "hwasin@gmail.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//listview에 어댑터 생성
mListView = (ListView) findViewById(R.id.ListView);
list_itemArrayList = new ArrayList<list_item>();
mListAdapter = new MyListAdapter(getApplicationContext(), list_itemArrayList);
mListView.setAdapter(mListAdapter);
//주소록 추가 버튼 이벤트
mButton = (Button) findViewById(R.id.add_btn);
mButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View view) {
//연락처 선택할 수 있게 주소록 가져옴
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setData(ContactsContract.CommonDataKinds.Phone.CONTENT_URI); //주소록 uri와 연결
startActivityForResult(intent, 0);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode == RESULT_OK){
Cursor cursor = getContentResolver().query(data.getData(), new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER},null,null,null);
cursor.moveToFirst();
name = cursor.getString(0);
number = cursor.getString(1);
//*************************************************************************************
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("연락처추가");
alert.setMessage("메일주소를 반드시 입력해 주세요!");
// Set an EditText view to get user input
final EditText input = new EditText(this);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
value.toString();
mail = value;
Toast.makeText(getApplicationContext(), mail, Toast.LENGTH_SHORT).show();
// Do something with value!
}
});
alert.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
//내용추가
list_itemArrayList.add( new list_item(name,number,mail));
//어댑터연결
mListAdapter = new MyListAdapter(MainActivity.this, list_itemArrayList);
mListView.setAdapter(mListAdapter);
Toast.makeText(getApplicationContext(), "추가되었습니다", Toast.LENGTH_SHORT).show();
cursor.close();
}
super.onActivityResult(requestCode,requestCode,data);
}
}
코드 짜깁기하는 초보라 어떻게 해결해야 할지 잘 모르겠습니다. 해결 방법 아시면 부디 알려주세요ㅠㅠㅠ
어댑터 코드는 글자수 초과로 댓글에 첨부합니다!