【发布时间】:2016-10-14 00:36:05
【问题描述】:
即使在一个方法中接收 3 个元素,下一个类中的变量 adapter 仍然为空:
public class SaveListFrag extends Fragment implements RequestCallBack<Savings> {
private ListView saveListview;
private FloatingActionButton floatIcon;
public List<Saving> mItemArray;
private DragListView mDragListView;
private boolean isDeviceOnline;
SavingsAdapter adapter;
Savings data;
SQLiteDB bd;
int test = 0;
rtn pretest;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_savelist, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
init(view);
floatIcon = (FloatingActionButton) view.findViewById(R.id.floatIcon);
addFloatButton();
}
private void init(View view) {
mDragListView = (DragListView) view.findViewById(R.id.drag_list_view);
mDragListView.getRecyclerView().setVerticalScrollBarEnabled(true);
mDragListView.getRecyclerView().setHorizontalScrollBarEnabled(false);
mDragListView.setDragListListener(new DragListView.DragListListenerAdapter() {
@Override
public void onItemDragStarted(int position) {
}
@Override
public void onItemDragEnded(int fromPosition, int toPosition) {
if (fromPosition != toPosition) {
}
}
});
isDeviceOnline = isInternetConnected();
if (isDeviceOnline) {
mItemArray = new ArrayList<>();
makeRequest();
}
setupListRecyclerView();
}
private void addFloatButton() {
floatIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), ActivityChooseSaving.class);
startActivity(intent);
}
});
}
private void setupListRecyclerView() {
mDragListView.setLayoutManager(new LinearLayoutManager(getActivity()));
adapter = new SavingsAdapter(mItemArray, R.layout.item_save_list, R.id.arrowlayout, false, getActivity());
Log.d("Contenido item: ", mItemArray.toString());
mDragListView.setAdapter(adapter, true);
mDragListView.setCanDragHorizontally(false);
mDragListView.setCustomDragItem(new MyDragItem(getActivity(), R.layout.item_save_list));
}
@Override
public void onRequestSuccess(Savings response) {
if (mDragListView != null) {
mDragListView.setScrollingEnabled(true);
}
for (int i = 0; i < response.data.size(); i++) {
mItemArray.add(response.data.get(i));
}
adapter.notifyDataSetChanged();
Log.d("Item ", String.valueOf(mItemArray.get(0)));
isDeviceOnline = true;
}
@Override
public void onRequestFail(String message) {
if (mDragListView != null) {
mDragListView.setScrollingEnabled(false);
Toast.makeText(this.getActivity(), getString(R.string.NO_internet), Toast.LENGTH_LONG).show();
isDeviceOnline = false;
}
}
@Override
public void onJSONException(String message) {
}
private boolean isInternetConnected() {
ConnectivityManager cm = ((ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE));
if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()) {
return true;
} else {
return false;
}
}
private void makeRequest() {
if (mDragListView != null) {
mDragListView.setScrollingEnabled(true);
}
ArrayList<BasicNameValuePair> params = new ArrayList<>();
User user = CacheUtils.getUser(this.getActivity());
params.add(new BasicNameValuePair("user_id", "3371"));
Request<Savings> request = new Request<Savings>(this.getActivity(), CommonUtils.SERVICES.FETCH_ALL_SAVINGS, this, Savings.class, params);
request.execute();
}
private void createOfflineDatabase(List<Saving> alstAccounts) {
Intent syncServiceIntent = new Intent(getActivity(), SyncDatabaseService.class);
syncServiceIntent.putExtra("accountsList", (java.io.Serializable) alstAccounts);
syncServiceIntent.putExtra(CommonUtils.ACTION_TYPE, CommonUtils.ACTION_CREATE_OFFLINE_DATABASE);
getActivity().startService(syncServiceIntent);
}
@SuppressWarnings("deprecation")
private static class MyDragItem extends DragItem {
public MyDragItem(Context context, int layoutId) {
super(context, layoutId);
}
@Override
public void onBindDragView(View clickedView, View dragView) {
dragView.setBackgroundColor(dragView.getResources().getColor(R.color.list_item_background));
}
}
}
如您所见,我打印第一个“mItemArray”位置的值来检查内容,它存在,但由于某种原因,mItemArray 在主适配器中设置为空。
【问题讨论】:
-
Log.d("Contenido item: ",是的,列表将为空。您应该在adapter.notifyDataSetChanged()之后添加另一个日志,因为那是列表应该显示您的数据的时间 -
我认为您在收到回复之前会显示列表。这意味着,您将获得空列表。得到 onRequestSuccess() 的响应后尝试设置适配器。
-
感谢您的回复。 @cricket_007 我按照您的建议放置了 Log 并且我正在获取数据,但由于某种原因,此数据仅存储在此方法中,在 setupListRecyclerView() 继续为空。
-
@madhan-kumar 我尝试了你所说的在 onRequestSucess() 中移动集适配器,但我收到 NullPointerException,因为方法内的适配器未初始化。
-
您可能对异步代码感到困惑。请求成功方法发生在 RecyclerView 设置之后
标签: android android-asynctask android-recyclerview