为什么 mSuggestedFriends 为空?
Why is mSuggestedFriends null?
我正在开发一个 android 应用程序,它使用 google 云端点作为后端。后端工作并且可以被 android 客户端调用。
在 FindFriendFragment 中,我调用了一个端点异步任务 class;
new EndpointTask.GetSuggestedFriends(mUserId, getContext());
它通过暴露的端点从数据存储中获取建议的朋友 api 并将它们发送回客户端;
return mApi.getSuggestedFriends().execute().getItems();
在post上执行我用了一个接口;
public interface OnFetchedSuggestedFriends {
void sendSuggestedFriends(List<Profile> suggestedFriends);
}
@Override
protected void onPostExecute(List<Profile> profiles) {
super.onPostExecute(profiles);
OnFetchedSuggestedFriends callback = (OnFetchedSuggestedFriends) mContext;
callback.sendSuggestedFriends(profiles);
}
FindFriendFragment 实现将建议的朋友发送回要使用的片段;
public class FindFriendFragment extends Fragment
implements EndpointTask.GetSuggestedFriends.OnFetchedSuggestedFriends
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_find_friend, container, false);
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
if (user != null)
mUserId = user.getToken(true).toString();
new EndpointTask.GetSuggestedFriends(mUserId, getContext());
RecyclerView suggestedFriendRecyclerView = (RecyclerView) view.findViewById(R.id.suggested_friends_recycler_view);
suggestedFriendRecyclerView.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext());
mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
suggestedFriendRecyclerView.setLayoutManager(mLayoutManager);
SuggestedFriendAdapter adapter = new SuggestedFriendAdapter(mSuggestedFriends, mUserId);
suggestedFriendRecyclerView.setAdapter(adapter);
return view;
}
@Override
public void sendSuggestedFriends(List<Profile> suggestedFriends) {
mSuggestedFriends = suggestedFriends;
}
然而,建议的朋友字段为空,即使当我使用 api 资源管理器测试我的后端时,getSuggestedFriends 方法 returns suggestedFriends 如预期的那样。这是因为 api 调用花费了很多时间吗?
编辑:
这里是异步任务代码:
public static class GetSuggestedFriends extends AsyncTask<Void, Void, List<Profile>>{
private BirthpayApi mApi;
private String mUserId;
private OnFetchedSuggestedFriends mListener;
public GetSuggestedFriends(String userId, OnFetchedSuggestedFriends listener) {
mUserId = userId;
mListener = listener;
}
public interface OnFetchedSuggestedFriends {
void sendSuggestedFriends(List<Profile> suggestedFriends);
}
@Override
protected List<Profile> doInBackground(Void... params) {
if (mApi == null) {
BirthpayApi.Builder builder = new BirthpayApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), null)
// options for running against local devappserver
// - 10.0.2.2 is localhost's IP address in Android emulator
// - turn off compression when running against local devappserver
.setRootUrl("http://10.0.2.2:8080/_ah/api/")
.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
@Override
public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {
abstractGoogleClientRequest.setDisableGZipContent(true);
}
});
mApi = builder.build();
}
try{
return mApi.getSuggestedFriends().execute().getItems();
} catch(IOException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(List<Profile> profiles) {
super.onPostExecute(profiles);
mListener.sendSuggestedFriends(profiles);
}
}
您好,您没有通知适配器检查以下代码是否有效:----
public class FindFriendFragment extends Fragment
implements EndpointTask.GetSuggestedFriends.OnFetchedSuggestedFriends
SuggestedFriendAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_find_friend, container, false);
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
if (user != null)
mUserId = user.getToken(true).toString();
new EndpointTask.GetSuggestedFriends(mUserId, getContext());
RecyclerView suggestedFriendRecyclerView = (RecyclerView) view.findViewById(R.id.suggested_friends_recycler_view);
suggestedFriendRecyclerView.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext());
mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
suggestedFriendRecyclerView.setLayoutManager(mLayoutManager);
adapter = new SuggestedFriendAdapter(mSuggestedFriends, mUserId);
suggestedFriendRecyclerView.setAdapter(adapter);
return view;
}
@Override
public void sendSuggestedFriends(List<Profile> suggestedFriends) {
mSuggestedFriends = suggestedFriends;
adapter.notifyDatasetChanged();
}
- getContext()* 在此处检查您的上下文是否正在实现您的接口!!!
改用下面一行:-
new EndpointTask.GetSuggestedFriends(mUserId, FindFriendFragment.this);
**在您需要的上下文的新代码行下方**
new EndpointTask.GetSuggestedFriends(mUserId, getActivity(),FindFriendFragment.this);
你的asynctask参数应该是!!!
EndpointTask.GetSuggestedFriends.OnFetchedSuggestedFriends listener;
并在您的构造函数中定义它,例如...
GetSuggestedFriends(mUserId, getActivity(),
EndpointTask.GetSuggestedFriends.OnFetchedSuggestedFriends listener_)
{
listener=listener_}
你在 post 上看起来像这样...
@Override
protected void onPostExecute(List<Profile> profiles) {
super.onPostExecute(profiles);
listener.sendSuggestedFriends(profiles);
}
:) 最后试行:-
new EndpointTask.GetSuggestedFriends(mUserId, getActivity(),FindFriendFragment.this).execute();
我正在开发一个 android 应用程序,它使用 google 云端点作为后端。后端工作并且可以被 android 客户端调用。
在 FindFriendFragment 中,我调用了一个端点异步任务 class;
new EndpointTask.GetSuggestedFriends(mUserId, getContext());
它通过暴露的端点从数据存储中获取建议的朋友 api 并将它们发送回客户端;
return mApi.getSuggestedFriends().execute().getItems();
在post上执行我用了一个接口;
public interface OnFetchedSuggestedFriends {
void sendSuggestedFriends(List<Profile> suggestedFriends);
}
@Override
protected void onPostExecute(List<Profile> profiles) {
super.onPostExecute(profiles);
OnFetchedSuggestedFriends callback = (OnFetchedSuggestedFriends) mContext;
callback.sendSuggestedFriends(profiles);
}
FindFriendFragment 实现将建议的朋友发送回要使用的片段;
public class FindFriendFragment extends Fragment
implements EndpointTask.GetSuggestedFriends.OnFetchedSuggestedFriends
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_find_friend, container, false);
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
if (user != null)
mUserId = user.getToken(true).toString();
new EndpointTask.GetSuggestedFriends(mUserId, getContext());
RecyclerView suggestedFriendRecyclerView = (RecyclerView) view.findViewById(R.id.suggested_friends_recycler_view);
suggestedFriendRecyclerView.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext());
mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
suggestedFriendRecyclerView.setLayoutManager(mLayoutManager);
SuggestedFriendAdapter adapter = new SuggestedFriendAdapter(mSuggestedFriends, mUserId);
suggestedFriendRecyclerView.setAdapter(adapter);
return view;
}
@Override
public void sendSuggestedFriends(List<Profile> suggestedFriends) {
mSuggestedFriends = suggestedFriends;
}
然而,建议的朋友字段为空,即使当我使用 api 资源管理器测试我的后端时,getSuggestedFriends 方法 returns suggestedFriends 如预期的那样。这是因为 api 调用花费了很多时间吗?
编辑:
这里是异步任务代码:
public static class GetSuggestedFriends extends AsyncTask<Void, Void, List<Profile>>{
private BirthpayApi mApi;
private String mUserId;
private OnFetchedSuggestedFriends mListener;
public GetSuggestedFriends(String userId, OnFetchedSuggestedFriends listener) {
mUserId = userId;
mListener = listener;
}
public interface OnFetchedSuggestedFriends {
void sendSuggestedFriends(List<Profile> suggestedFriends);
}
@Override
protected List<Profile> doInBackground(Void... params) {
if (mApi == null) {
BirthpayApi.Builder builder = new BirthpayApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), null)
// options for running against local devappserver
// - 10.0.2.2 is localhost's IP address in Android emulator
// - turn off compression when running against local devappserver
.setRootUrl("http://10.0.2.2:8080/_ah/api/")
.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
@Override
public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {
abstractGoogleClientRequest.setDisableGZipContent(true);
}
});
mApi = builder.build();
}
try{
return mApi.getSuggestedFriends().execute().getItems();
} catch(IOException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(List<Profile> profiles) {
super.onPostExecute(profiles);
mListener.sendSuggestedFriends(profiles);
}
}
您好,您没有通知适配器检查以下代码是否有效:----
public class FindFriendFragment extends Fragment
implements EndpointTask.GetSuggestedFriends.OnFetchedSuggestedFriends
SuggestedFriendAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_find_friend, container, false);
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
if (user != null)
mUserId = user.getToken(true).toString();
new EndpointTask.GetSuggestedFriends(mUserId, getContext());
RecyclerView suggestedFriendRecyclerView = (RecyclerView) view.findViewById(R.id.suggested_friends_recycler_view);
suggestedFriendRecyclerView.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext());
mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
suggestedFriendRecyclerView.setLayoutManager(mLayoutManager);
adapter = new SuggestedFriendAdapter(mSuggestedFriends, mUserId);
suggestedFriendRecyclerView.setAdapter(adapter);
return view;
}
@Override
public void sendSuggestedFriends(List<Profile> suggestedFriends) {
mSuggestedFriends = suggestedFriends;
adapter.notifyDatasetChanged();
}
- getContext()* 在此处检查您的上下文是否正在实现您的接口!!!
改用下面一行:-
new EndpointTask.GetSuggestedFriends(mUserId, FindFriendFragment.this);
**在您需要的上下文的新代码行下方**
new EndpointTask.GetSuggestedFriends(mUserId, getActivity(),FindFriendFragment.this);
你的asynctask参数应该是!!!
EndpointTask.GetSuggestedFriends.OnFetchedSuggestedFriends listener;
并在您的构造函数中定义它,例如...
GetSuggestedFriends(mUserId, getActivity(),
EndpointTask.GetSuggestedFriends.OnFetchedSuggestedFriends listener_)
{
listener=listener_}
你在 post 上看起来像这样...
@Override
protected void onPostExecute(List<Profile> profiles) {
super.onPostExecute(profiles);
listener.sendSuggestedFriends(profiles);
}
:) 最后试行:-
new EndpointTask.GetSuggestedFriends(mUserId, getActivity(),FindFriendFragment.this).execute();