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

AlertDialog Edittext에 문자입력 오류 질문합니다

0 추천

리스트가 있고, 주소록에서 폰번호랑 메일을 받아와서 리스트를 작성시킵니다.

이어서 리스트 아이템 클릭 이벤트를 등록해서,  클릭 시 다이얼로그를 띄우도록 작성했습니다.

다이얼로그는 3개의 에디트 텍스트와 2개의 버튼으로 되있는데, 

여기서 에디트 텍스트에 문자를 입력하려고 터치하면 어플이 종료되네요 ㅠ

뭐가 문제인걸까요???

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.View;
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;
    private MyListAdapter           mListAdapter;
    private ArrayList<list_item>    list_itemArrayList;
    private Button                  mButton;

    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>();


        //주소록 추가 버튼 이벤트
        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);
            }
        });

        
        //내용추가
        //list_itemArrayList.add( new list_item(name,number,mail));

        //어댑터연결
        //mListAdapter = new MyListAdapter(MainActivity.this, list_itemArrayList);
        //mListView.setAdapter(mListAdapter);


        //리스트클릭 이벤트 리스너 추가 -> 다이얼로그 띄워서 수정,삭제 가능하도록 만들자...
        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            String Uname, Uphone, Umail; //사용자에게 재입력 받을 정보.
            //수정 (갱신)
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                //연락처 수정 다이얼로그
                AlertDialog.Builder mAlert = new AlertDialog.Builder(MainActivity.this);
                mAlert.setTitle("연락처 정보 수정");
                mAlert.setMessage("메일주소를 반드시 입력해 주세요.");

                final EditText Ename = new EditText(MainActivity.this);
                final EditText Ephone = new EditText(MainActivity.this);
                final EditText Email = new EditText(MainActivity.this);

                LinearLayout ll=new LinearLayout(MainActivity.this);
                ll.setOrientation(LinearLayout.VERTICAL);
                ll.addView(Ename);
                ll.addView(Ephone);
                ll.addView(Email);
                mAlert.setView(ll);
                
                //mAlert.setCancelable(false);

                /*
                Uname = list_itemArrayList.get(position).name;
                Uphone = list_itemArrayList.get(position).phone;
                Umail = list_itemArrayList.get(position).mail;


                mAlert.setPositiveButton("Update",  new DialogInterface.OnClickListener() {
                    //데이터 갱신
                    public void onClick(DialogInterface dialog, int id) {
                        if(Ename.getText().toString()!=null){
                            Uname = Ename.getText().toString();
                        }
                        if(Ephone.getText().toString()!=null){
                            Uphone = Ephone.getText().toString();
                        }
                        if(Email.getText().toString()!=null){
                            Umail = Email.getText().toString();
                        }
                        //ACTION
                    }
                });

                mAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
                */

                mAlert.show();
                //AlertDialog alert = mAlert.create();
                //alert.show();



                //데이터베이스 갱신해야댐!!!!!!!!!!!

                //list_itemArrayList.get(position).name = Uname;
                //list_itemArrayList.get(position).phone = Uphone;
                //list_itemArrayList.get(position).mail = Umail;

                mListView.setAdapter(mListAdapter);
                mListAdapter.notifyDataSetChanged();
                //Toast.makeText(MainActivity.this ,list_itemArrayList.get(position).name,Toast.LENGTH_LONG).show();
            }
        });
    }


    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);



            //여기서 불러온 주소록 데이터 데이터베이스에 적재시켜야댐!!!!!!!!!!!


            //내용추가
            list_itemArrayList.add( new list_item(name,number,null));
            //어댑터연결
            mListAdapter = new MyListAdapter(MainActivity.this, list_itemArrayList);
            mListView.setAdapter(mListAdapter);

            Toast.makeText(getApplicationContext(), "추가되었습니다.\n"+"이름을 눌러 정보를 수정 또는 추가할 수 있습니다.", Toast.LENGTH_SHORT).show();
            cursor.close();
        }
        super.onActivityResult(requestCode,requestCode,data);
    }

}

 

 

캡쳐화면인데 저기 저 커서있는부분을 클릭하면 어플리케이션이 종료되네요.ㅠ

딱히 오류메시지가 안드로이드창에서 뜨지는 않네욥...

sksk (320 포인트) 님이 2016년 9월 30일 질문
sksk님이 2016년 9월 30일 수정
에러 로그도 같이 추가해보세요.
09-30 16:48:46.351 448-448/? E/lowmemorykiller: Error writing /proc/6714/oom_score_adj; errno=22

errno==22 invalid argument라는 것 같네요...
onCreate함수에서는 다이얼로그 실행해도 문제가 없느데 listitem클릭이벤트 안으로 들어가니깐 안되네요
네 저도 해보고 리스트 아이템 클릭에도 해봤는데 크게 문제가 없어서... setAdapter이런코드 다 빼보고 해보세요
Error가 lowmemorykiller라고 되어 있네요. 저게 해당 앱과 관련된 에러면 안드로이드가 메모리가 부족해 일부 앱을 강제 종료하는 것같이 보이네요. 안드로이스튜디오의 메모리 모니터로 메모리 상태를 한번 체크해 보세요.

1개의 답변

0 추천
//어댑터연결

        //mListAdapter = new MyListAdapter(MainActivity.this, list_itemArrayList);

        //mListView.setAdapter(mListAdapter);

이부분을 해제하시공,

mListView.setOnItemClickListener 의

//mListView.setAdapter(mListAdapter);

하시공

 mListAdapter.notifyDataSetChanged();

이것은

setPositiveButton 으로 옮기고 바로전에 데이터를 add 해보시길..

 

에러는 mListAdapter 를 상단에서 // 해서리 현재 null 이기때문입니다
익명사용자 님이 2016년 9월 30일 답변
...