Search code examples
javaandroidandroid-fragmentsfragmentandroid-contentprovider

Not getting Contact Number in Fragment


I created below class but numbers is coming null. The same code is working fine with activity. I have made changes in context of Fragment. What else is creating problem in the code.

public class TestFrag extends Fragment {
    private static final String[] phoneProjection = new String[]{ContactsContract.CommonDataKinds.Phone.DATA};
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.testfrag, container, false);

        TextView textView = (TextView) view.findViewById(R.id.clickme);
        EditText editText = (EditText) view.findViewById(R.id.contact);

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
                getActivity().startActivityForResult(intent, 1);

            }
        });


        return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {

            case (1):


                //ContentResolver cr = getContentResolver();
                Uri contactData = data.getData();
                Cursor c = getActivity().getContentResolver().query(contactData, phoneProjection, null, null, null);
                if (c.moveToFirst()) {
                    String numbers = c.getString(0);
                    Log.e("Hi", numbers);

                }
                break;
        }
    }
}

Solution

  • you are calling getActivity().startActivityForResult(intent, 1); it's response will be handled in activity's onActivityResult() method you should call startActivityForResult(intent, 1); which is fragment's method and will call the fragments onActivityResult().

    you can check this link too