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

인텐트로 값 넘겨주는 기능구현에서 널포인트 에러

0 추천

메인 액티비티에서 특정 버튼 클릭하면 인텐트를 이용해서 주소록 을 가져온 다음에 

다이얼로그에 그값을 대입시키고 다이얼로그에서 인텐트로 메인액티비티에 보내줘서 정보를 변경하려 하는데 값이 자꾸 널포인트가 뜨는데 이유를 모르겠습니다.

Main

public class MainActivity extends Activity {

    Custom_Dial Dial;
    ImageView a;
    TextView b;
    Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Dial= new Custom_Dial(this);
 
        a=(ImageView)findViewById(R.id.PIC);
        b=(TextView)findViewById(R.id.NAME);
 
    }
 
    public void mOnClick(View v)
    {
        switch (v.getId())
        {
            case R.id.PIC:
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setData(ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
                startActivityForResult(intent,0);
 
 
                break;
        }
    }
 
 
    @Override
    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();
 
            Dial.Name.setText("이름:"+cursor.getString(0));
            Dial.Phone.setText("Tel: "+cursor.getString(1));
            cursor.close();
 
 
            Dial.show();
 
                intent=getIntent();
                b.setText(intent.getExtras().getString("NAME"));
 
 
        }
        super.onActivityResult(requestCode,resultCode,data);
    }
 
}
 
dialLog
 
public class Custom_Dial extends Dialog implements View.OnClickListener {
 
    ImageView img;
    Button Okay,Cancel;
    TextView Name,Phone;
    Intent intent;
    public Custom_Dial(Context context)
    {
 
        super(context);
        Log.e("DialogShow","DialLog_Show");
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.custom_dial);
 
        img = (ImageView)findViewById(R.id.PIC);
        Okay = (Button)findViewById(R.id.OKAY_BTN);
        Cancel = (Button)findViewById(R.id.CANCEL_BTN);
        Name = (TextView)findViewById(R.id.NAME);
        Phone = (TextView)findViewById(R.id.PHONE);
        img.setOnClickListener(this);
        Okay.setOnClickListener(this);
        Cancel.setOnClickListener(this);
    }
 
 
    @Override
    public void onClick(View v) {
        switch (v.getId())
        {
            case R.id. PIC:
                Log.e("DialogClick","Click");
                break;
            case R.id.OKAY_BTN:
                                  intent = new Intent(getContext(),MainActivity.class);
                                  intent.putExtra("NAME",Name.toString());
                                  intent.putExtra("PHONE",Phone.toString());
                                  dismiss();
                break;
            case R.id.CANCEL_BTN: dismiss(); break;
        }
    }
 
 
}
 
Logcat
 
     Caused by: java.lang.NullPointerException
            at kr.qoop.customdialog.MainActivity.onActivityResult(MainActivity.java:69)
 
 
 
 
 

 

익명사용자 님이 2015년 3월 27일 질문

2개의 답변

+1 추천
 
채택된 답변
69번째 라인이 어딘지 알려주세요 그리고 setResult(); 가 없는것 같은데요.

startActivityResult 예제 검색해서 다시한번 사용법을 확인하세요.
익명사용자 님이 2015년 3월 27일 답변
답변감사드립니다.
69번째줄이..b.setText(intent.getExtras().getString("NAME")); 이부분이구요 ...
onActivityResult 함수랑 Intent랑은 별개입니다. onActivityResult 함수에서 주소록 정보를 받아온뒤에 커스텀 다이얼로그에 대입시켜서 화면에 출력시키는것은 문제없이 잘 되었는데 . 그정보를 다이얼로그 class에서 인텐트 후 메인에 보내주는 부분이 문제입니다.ㅜ
+1 추천

onActivityResult에서 파라미터의 intent를 사용하지 않고 getIntent를 호출하고 있네요 

쎄미 (162,410 포인트) 님이 2015년 3월 27일 답변
세미님 말씀데로 getIntent 하시면 안됩니다.

   intent=getIntent();     <-- 이거 지우시고
   b.setText(data.getExtras().getString("NAME"));   <-- 이렇게 바꾸세요
...