2016-10-28 5 views
-3

Привет, я делаю Fragment. Теперь я пытаюсь показать все мои контакты в моем ListView. Я все сделал, но я все еще получаю Cursor null Я также позвонил getActivity(). все же ошибка такая же.Фрагмент getActivity(). GetContentResolver(). Query() return null

public class AllContacts extends Fragment { 


public AllContacts() { 
    // Required empty public constructor 

} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_all_contacts, container, false); 
    ListView list = (ListView) view.findViewById(R.id.listview); 

    ArrayList<String> arraylist= new ArrayList<>(); 


    String sorting = ContactsContract.Contacts.DISPLAY_NAME+ "DESC"; 
    Uri uri = Uri.parse("content://ContactsContract"); 
    Cursor c = getActivity().getContentResolver().query(uri,null,null,null,sorting); 
    while (c.moveToNext()) { 

     String contactName = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 

     arraylist.add(contactName); 
    }//end loop 
     c.close(); 
    ArrayAdapter adapter = new ArrayAdapter(getContext(),android.R.layout.simple_list_item_1,arraylist); 

    list.setAdapter(adapter); 
    return view; 
} 

} 

Исключение:

FATAL EXCEPTION: main 

Process: com.example.awais_pc.contactapp, PID: 25641 
java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.database.Cursor.moveToNext()' on a null object reference 
at com.example.awais_pc.contactapp.AllContacts.onCreateView(AllContacts.java:43) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) 
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1177) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1025) 
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545) 
at android.view.View.measure(View.java:20151) 
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716) 
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462) 
at android.view.View.measure(View.java:20151) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
at android.view.View.measure(View.java:20151) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) 
at android.view.View.measure(View.java:20151) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
at android.view.View.measure(View.java:20151) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:747) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:629) 
at android.view.View.measure(View.java:20151) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3158) 
at android.view.View.measure(View.java:20151) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2594) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1549) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1841) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1437) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7397) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920) 
at android.view.Choreographer.doCallbacks(Choreographer.java:695) 
at android.view.Choreographer.doFrame(Choreographer.java:631) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:158) 
at android.app.ActivityThread.main(ActivityThread.java:7224) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
+0

Но я не знаю, почему люди здесь дают так много отрицательных обратных связей :( – Alex

ответ

2

Есть две проблемы, связанные с запросом, то первый из них является недостающее пространство перед DESC ключевого слова и второй из них является недействительным Uri.

Изменить следующее:

String sorting = ContactsContract.Contacts.DISPLAY_NAME+ "DESC"; 
Uri uri = Uri.parse("content://ContactsContract"); 
Cursor c = getActivity().getContentResolver().query(uri,null,null,null,sorting); 

Для этого:

String sorting = ContactsContract.Contacts.DISPLAY_NAME + " DESC"; 
Cursor c = getActivity().getContentResolver() 
    .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
     null, null, null, sorting); 
Смежные вопросы