在我的Android应用程序中,它使用谷歌云端点作为可扩展的后端解决方案,我在调用时会在暴露的端点api中获取用户朋友时收到NullPointerException。
最初,在我的片段FriendFragment中,我调用了异步任务类;
new EndpointTask.GetFriends(mUserId, FriendFragment.this).execute();
然后,这个异步任务类调用名为getFriends的端点api方法;
return mApi.getFriends(mUserId).execute().getItems();
这将调用此方法,该方法在api explorer中按预期运行;
@ApiMethod(name = "getFriends", path = "friends", httpMethod = ApiMethod.HttpMethod.GET)
public List<Profile> getFriends(@Named("userId") String userId) {
Profile profile = ofy().load().key(Key.create(Profile.class, userId)).now();
if (profile != null) {
List<Profile> friends = new ArrayList<>(0);
for (String friendId : profile.getFriendIds()) {
Profile friend = ofy().load().key(Key.create(Profile.class, friendId)).now();
friends.add(friend);
}
return friends;
}
return null;
}
返回的List通过它实现的接口发送回片段;
// The interface
public interface OnFetchedFriends {
void sendFriends(List<Profile> friends);
}
@Override
protected void onPostExecute(List<Profile> friends) {
super.onPostExecute(friends);
mListener.sendFriends(friends);
}
// In the fragment
@Override
public void sendFriends(List<Profile> friends) {
mFriends.clear();
mFriends.addAll(friends);
mAdapter.notifyDataSetChanged();
}
然后将此数据传递到适配器,并应在回收站视图中显示在屏幕上;
RecyclerView requestRecyclerView = (RecyclerView) view.findViewById(R.id.friends_recycler_view);
requestRecyclerView.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext());
mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
requestRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new FriendAdapter(mFriends);
requestRecyclerView.setAdapter(mAdapter);
这是堆栈跟踪:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.hb.backend.birthpayApi.model.ProfileCollection.getItems()' on a null object reference
at com.hb.birthpay.utils.EndpointTask$GetFriends.doInBackground(EndpointTask.java:101)
at com.hb.birthpay.utils.EndpointTask$GetFriends.doInBackground(EndpointTask.java:67)
为什么会发生java.lang.NullPointerException?