2017-03-01 3 views
0

그래서 모든 구문 분석 사용자의 사용자 이름 목록을 가져와 목록보기 안에 표시하려고합니다. 따라서 내 응용 프로그램에서 누군가를 검색 할 수 있지만 대신이 오류 :android에서 구문 분석 사용자 목록 가져 오기

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.les20162.room8, PID: 19957 
       java.lang.NullPointerException: storage == null 
        at java.util.Arrays$ArrayList.<init>(Arrays.java:38) 
        at java.util.Arrays.asList(Arrays.java:155) 
        at com.les20162.room8.Activities.RoomatesFragment.initList(RoomatesFragment.java:171) 
        at com.les20162.room8.Activities.RoomatesFragment.onCreateView(RoomatesFragment.java:81) 
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2189) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 
        at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
        at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:757) 
        at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2355) 
        at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2146) 
        at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098) 
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008) 
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:7409) 
        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) 

이 나는 ​​사용자 목록 얻기 위해 사용하고 코드입니다 :

public class RoomatesFragment extends Fragment { 

//variables 
private EditText    search; 
private String[]    users; 
private ArrayList<String> listUsers; 
private ArrayAdapter<String> adapter; 
private ListView    listView; 

private OnFragmentInteractionListener mListener; 

public RoomatesFragment() { 
    // Required empty public constructor 
} 

public static RoomatesFragment newInstance(String param1, String param2) { 
    RoomatesFragment fragment = new RoomatesFragment(); 
    Bundle args = new Bundle(); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    final View myView; 
    myView = inflater.inflate(R.layout.fragment_roomates, container, false); 

    listView = (ListView) myView.findViewById(R.id.listviewMoradores); 
    search = (EditText) myView.findViewById(R.id.search); 

    initList(); 

    search.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
      if(charSequence.toString().equals("")){ 
       initList(); 
      } 
      else{ 
       searchUser(charSequence.toString()); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 

    return myView; 
} 

public void searchUser(String userToSearch) { 
    for(String user: users){ 
     if(!user.contains(userToSearch)){ 
      listUsers.remove(user); 
     } 
    } 

    adapter.notifyDataSetChanged(); 
} 

// TODO: Rename method, update argument and hook method into UI event 
public void onButtonPressed(Uri uri) { 
    if (mListener != null) { 
     mListener.onFragmentInteraction(uri); 
    } 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof OnFragmentInteractionListener) { 
     mListener = (OnFragmentInteractionListener) context; 
    } else { 
     throw new RuntimeException(context.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 

public interface OnFragmentInteractionListener { 
    // TODO: Update argument type and name 
    void onFragmentInteraction(Uri uri); 
} 

private void initList(){ 
    ParseQuery<ParseUser> query = ParseUser.getQuery(); 
    query.findInBackground(new FindCallback<ParseUser>() { 
     public void done(List<ParseUser> objects, ParseException e) { 
      users = new String[objects.size()+1]; 
      if (e == null) { 
       for (int i = 0; i < objects.size(); i++) { 
        users[i] = objects.get(i).getUsername(); 
       } 
      } else { 
       users[0] = "NONE"; 
      } 
     } 
    }); 
    listUsers = new ArrayList<>(Arrays.asList(users)); 
    adapter = new ArrayAdapter<String>(getActivity(), R.layout.list_item, R.id.user, listUsers); 

    listView.setAdapter(adapter); 
} 

}

내가 tryed 한 거의 모든하지만이 같은 오류가 계속 , 너희들은 어떤 ide를 가지고 있니? 이 문제를 어떻게 해결할 수 있습니까? 나는 안드로이드 프로그래밍에있어서 매우 익숙하다. 어떤 도움도 환영 할 것이다. :)

P.S : 영어는 나의 모국어가 아니기 때문에, 실수를해서 유감 스럽다.

답변

0

아마도 AsyncTask를 사용해보십시오. 당신은 목록을 가져올 수 있고 일단 끝내면 그려보십시오. 아마 목록은 그 목록을 채우고 그것을 그려 내려고하지 않습니다.

+0

이 경우 어떻게 AsyncTask를 사용할 수 있습니까? – Erick