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

리스트뷰 DB값 전화걸기 처리 어떻게 하면 될까요?

0 추천

안녕하세요 많은 도움을 받고있습니다.

감사합니다.

제가 다른곳의 예제를 통해서 리스트뷰에 mysql에서 값을 가져와 뿌려주는것 까지 성공했으나

클릭했을때 해당 전화번호로 전화를 걸고 싶은데 눌러도 꼼짝을 안하네요.. 해쉬값으로 가져와서 그런건지..

어떻게 하면 될까요? 소스 첨부합니다 도와주세요 ㅠㅠ

 

public class MainActivity extends Activity {

    


    String myJSON;

    private static final String TAG_RESULTS = "result";
    private static final String TAG_ID = "id";
    private static final String TAG_NAME = "name";
    private static final String TAG_MOBILE = "mobile";


    JSONArray peoples = null;

    ArrayList<HashMap<String,String>> personList;

    ListView list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = (ListView) findViewById(R.id.listView);
        personList = new ArrayList<HashMap<String,String>>();
        getData("http://192.168.0.5/getdata.php");


        list.setOnItemClickListener(listener);
        //task = new back();

        //imView = (ImageView) findViewById(R.id.top);


        //task.execute(imgUrl+"top.png");

        ImageView imageView2 = (ImageView) findViewById(R.id.top);
        Glide.with(this).load("http://192.168.0.5/image/top.png").into(imageView2);
        ImageView imageView = (ImageView) findViewById(R.id.top2);
        Glide.with(this).load("http://192.168.0.5/image/images.jpg").into(imageView);


    }


    

    public void banner1(View v) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.naver.com"));
        startActivity(intent);
    }

//리스트뷰

    protected void showList() {
        try {
            JSONObject jsonObj = new JSONObject(myJSON);
            peoples = jsonObj.getJSONArray(TAG_RESULTS);

            for (int i = 0; i < peoples.length(); i++) {
                JSONObject c = peoples.getJSONObject(i);
                String id = c.getString(TAG_ID);
                String name = c.getString(TAG_NAME);
                String mobile = c.getString(TAG_MOBILE);


                HashMap<String,String> persons = new HashMap<String,String>();

                persons.put(TAG_ID, id);
                persons.put(TAG_NAME, name);
                persons.put(TAG_MOBILE, mobile);

                personList.add(persons);
            }

            ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this, personList, R.layout.list_item,
                    new String[]{TAG_ID, TAG_NAME, TAG_MOBILE},
                    new int[]{R.id.id, R.id.name, R.id.mobile}
            );

            list.setAdapter(adapter);

 

        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

    OnItemClickListener listener = new OnItemClickListener() {  // 이렇게 해주었는데 꼼짝을 안합니다!! 로그를 찍어보니 TAG_MOBILE은 단순히 mobile이라는 글씨를 스트링값으로 가져오는데.. 어떤걸 넣어줘야 전화걸기를 할 수 있을까요??? ㅠㅠㅠ
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            String strPhoneNumber = "tel:"+TAG_MOBILE;
            Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(strPhoneNumber));
            startActivity(intent);
            Log.d("onClick>>>", ""+strPhoneNumber);

        }
    };


    public void getData(String url){
        class GetDataJSON extends AsyncTask<String, Void, String> {

            @Override
            protected String doInBackground(String... params) {

                String uri = params[0];

                BufferedReader bufferedReader = null;
                try {
                    URL url = new URL(uri);
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    StringBuilder sb = new StringBuilder();

                    bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));

                    String json;
                    while((json = bufferedReader.readLine())!= null){
                        sb.append(json+"\n");
                    }

                    return sb.toString().trim();

                }catch(Exception e){
                    return null;
                }

 

            }

            @Override
            protected void onPostExecute(String result){
                myJSON=result;
                showList();
            }
        }
        GetDataJSON g = new GetDataJSON();
        g.execute(url);
    }

    public void call(View v){
        String strPhoneNumber = "tel:"+TAG_MOBILE;
        Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(strPhoneNumber));
        startActivity(intent);
        Log.d("onClick>>>", ""+strPhoneNumber);

    }

}

 

언제나감사합니다. 님이 2017년 5월 30일 질문

2개의 답변

+1 추천

퍼미션 한번 체크해보세요.
<uses-permission android:name="android.permission.CALL_PHONE" />

마인드진 (920 포인트) 님이 2017년 5월 30일 답변
그것도 정상적으로 들어가 있는데.. 왜그럴까요 ㅠㅠ
아.. 질문을 잘못봤네요..;; TAG_MOBILE 는 단순히 DB 컬럼명인데 tel 에 넣으셨네요. 대신 리스트에서 번호를 가져와서 넣으시면 되겠네요.
죄송하지만 혹시 어떻게 구문을 짜줘야 넣을수 있을까요? 리스트에서 번호를 가져오려고 노력중인데 쉽지가 않네요 ㅠㅠ
+1 추천

personList에 전화번호 값이 담겨져있겠네요

해당 personList에서 값을 가져다 쓰세요

qweqweq (4,220 포인트) 님이 2017년 5월 30일 답변
personList에 이름 id mobile값이 들어있는것은 확인이 되었는데요..
현 시점에서 죄송하지만 소스를 어떻게 구현해야 가져올수 있을까요? ㅠㅠ
감사합니다..
String strPhoneNumber = "tel:"+TAG_MOBILE; 대신
String strPhoneNumber = "tel:"+personList.get(position).get(TAG_MOBILE);
하시면 되겠네요
해결했습니다!! 감사합니다!!
클릭이벤트도 먹질 않아서 찾아보니 xml쪽에
android:descendantFocusability="blocksDescendants" 해당 옵션을 추가해 줘야 하네요!!
감사합니다!!!!!!!!!!
해결하셨으면 추천버튼 눌러주시면 감사하겠습니다.
저 뿐만이 아니라 다른분들 답변들도 마찬가지에요~
...