Android RecyclerView导致刷新时强制停止

Android RecyclerView导致刷新时强制停止,android,asynchronous,android-asynctask,android-recyclerview,Android,Asynchronous,Android Asynctask,Android Recyclerview,我使用的是这个网站上的Recyclerview 当我刷新recyclerview并同时滚动时,应用程序将强制关闭 public class NewsFeed extends Fragment implements MyDynamicRecyclerView.SwipeRefreshListener, MyDynamicRecyclerView.LoadMoreListener { MyDynamicRecyclerView myRecyclerview; NewsFeedAdapter tes

我使用的是这个网站上的Recyclerview

当我刷新recyclerview并同时滚动时,应用程序将强制关闭

public class NewsFeed extends Fragment implements MyDynamicRecyclerView.SwipeRefreshListener, MyDynamicRecyclerView.LoadMoreListener {

MyDynamicRecyclerView myRecyclerview;
NewsFeedAdapter testAdapter;
ArrayList<ProgramModel> modelArrayList;
LinearLayoutManager linearLayoutManager;
Dialog dialog;
int limit;
private boolean firstSwipe;


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

@Override
public void onDestroy() {
    super.onDestroy();
    Log.i("NewsFeedFragment", "Destroyed");
    if (dialog != null)
        dialog.dismiss();
}

@Override
public void onPause() {
    super.onPause();
    Log.i("NewsFeedFragment", "Paused");
    if (dialog != null)
        dialog.dismiss();
}

@Override
public void onResume() {
    super.onResume();
    Log.i("NewsFeedFragment", "Resumed");
    firstSwipe = false;
    if (checkInternetForNewsFeed() && firstSwipe) {
        removeItems();
        new FetchBooks(false).execute();
        firstSwipe = false;
        Log.d("Swipe", "First swipe");
    } else if (checkInternetForNewsFeed() && !firstSwipe) {
        fetchAllBooksByHeader();
        firstSwipe = true;
        Log.d("Swipe", "Not first swipe");
    } else {
        myRecyclerview.showInfoLayout();
    }

    getActivity().setTitle("Të gjithë");
}

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

    Log.i("NewsFeedFragment", "Created");

    View v = inflater.inflate(R.layout.news_feed_fragment_layout, container, false);

    dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.setContentView(R.layout.loading_layout);

    myRecyclerview = (MyDynamicRecyclerView) v.findViewById(R.id.myRecyclerview);

    modelArrayList = new ArrayList<>();
    testAdapter = new NewsFeedAdapter(getActivity().getApplicationContext(), modelArrayList, (AppCompatActivity) getActivity(), this, false);

    linearLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext());

    myRecyclerview.setScrollContainer(false);
    myRecyclerview.setBackgroundColor("#FFFFFF");
    myRecyclerview.setSwipeRefresh(true);
    myRecyclerview.setColorSchemeColors(Color.RED, Color.YELLOW, Color.BLACK, Color.GREEN, Color.BLUE);
    myRecyclerview.setLoadMore(true, linearLayoutManager);


    myRecyclerview.setLoadMoreListener(this);
    myRecyclerview.setOnRefreshListener(this);


    myRecyclerview.setLayoutManager(linearLayoutManager);
    myRecyclerview.setItemAnimator(new DefaultItemAnimator());
    myRecyclerview.setSimpleDivider(false);
    myRecyclerview.setAdapter(testAdapter);


    limit = 0;
    if (checkInternetForNewsFeed()) {
        firstSwipe = false;
        fetchAllBooksFromDB();
    } else {
        firstSwipe = true;
        myRecyclerview.showInfoLayout();
    }

    return v;
}

public void fetchAllBooksByHeader() {
    limit = 0;
    if (modelArrayList.size() >= 1) {
        removeItems();
    }

    new FetchBooks(true).execute();
    testAdapter.notifyDataSetChanged();
}

public void fetchAllBooksFromDB() {
    if (modelArrayList.size() >= 1) {
        removeItems();
    }

    new FetchBooks(false).execute();
    testAdapter.notifyDataSetChanged();
}

public void addHeader() {
    if (modelArrayList.size() == 0)
        modelArrayList.add(new ProgramModel());
}

public void addItem(String title, String author, String imageName) {
    modelArrayList.add(new ProgramModel(title, author, imageName));
    testAdapter.notifyDataSetChanged();
}

public void removeItems() {
    modelArrayList.clear();
    addHeader();
}

@Override
public void OnRefresh() {

    getActivity().setTitle("Të gjithë");
    limit = 0;
    if (checkInternetForNewsFeed() && firstSwipe) {
        removeItems();
        new FetchBooks(false).execute();
        firstSwipe = false;
        Log.d("Swipe", "First swipe");
    } else if (checkInternetForNewsFeed() && !firstSwipe) {
        removeItems();
        new FetchBooks(true).execute();
        Log.d("Swipe", "Not first swipe");
    } else {
        myRecyclerview.showInfoLayout();
    }

    myRecyclerview.stopSwipeRefresh();


}

private boolean checkInternetForNewsFeed() {
    if (new ConnectivityState(getActivity()).isConnected()) {
        myRecyclerview.hideInfoLayout();
        return true;
    } else {
        // Fonts for the title and the message of the content
        Typeface messageTypeface = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Light.ttf");
        Typeface titleTypeface = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Bold.ttf");

        // Setting up the content
        myRecyclerview.setInfoIcon(R.drawable.warning_icon, "#000000");
        myRecyclerview.setInfoTitle("Nuk jeni i lidhur me internet.", 18, Color.GRAY, titleTypeface);
        myRecyclerview.setInfoMessage("Rifreskoni edhe njëherë për të kontrolluar aksesin në internet.", 13, Color.GRAY, messageTypeface);
        return false;
    }
}

@Override
public void OnLoadMore() {
    new FetchBooks(true).execute();
    MyDynamicToast.informationMessage(AppController.getInstance(), "...");
}

public static void hideLoadingDialogFromBookActivity(Dialog d) {
    d.hide();
}

private class FetchBooks extends AsyncTask<Void, Void, Void> {

    private boolean reload;

    FetchBooks(boolean reload) {
        this.reload = reload;
    }

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected Void doInBackground(Void... params) {
        getBooksFromDB();
        return null;
    }

    private void getBooksFromDB() {
        StringRequest requestBooks = new StringRequest(Request.Method.GET, AppConfig.URL_FETCH_BOOKS, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONArray jsonArray = new JSONArray(response);

                    for (int i = limit; i < jsonArray.length(); i++) {
                        if (i < (limit + 5)) {
                            JSONObject jsonObject = jsonArray.getJSONObject(i);
                            String imageName = "http://ec2-52-39-232-168.us-west-2.compute.amazonaws.com/files/books/" + jsonObject.getString("cover");
                            modelArrayList.add(new ProgramModel(jsonObject.getString("title"), jsonObject.getString("author"), imageName));
                        } else {
                            break;
                        }
                    }
                    limit += 5;
                    if (reload) {
                        testAdapter.notifyDataSetChanged();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                    MyDynamicToast.errorMessage(AppController.getInstance(), "" + e.getMessage());
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                MyDynamicToast.errorMessage(AppController.getInstance(), "Request did not work!");
            }
        });

        AppController.getInstance().addToRequestQueue(requestBooks);

    }

}

}
公共类新闻提要扩展片段实现MyDynamicRecycleView.SwipeRefreshListener、MyDynamicRecycleView.LoadMoreListener{
MyDynamicRecyclerView myRecyclerview;
NewsFeedAdapter测试适配器;
ArrayList模型ArrayList;
直线布局经理直线布局经理;
对话;
整数极限;
私有布尔第一刷;
公共新闻提要(){
//必需的空公共构造函数
}
@凌驾
公共空间{
super.ondestory();
Log.i(“NewsFeedFragment”,“销毁”);
如果(对话框!=null)
dialog.dismise();
}
@凌驾
公共无效暂停(){
super.onPause();
Log.i(“NewsFeedFragment”,“暂停”);
如果(对话框!=null)
dialog.dismise();
}
@凌驾
恢复时公开作废(){
super.onResume();
Log.i(“NewsFeedFragment”,“Resume”);
firstSwipe=false;
如果(选中InternetForNewsfeed()&第一次滑动){
removitems();
new FetchBooks(false).execute();
firstSwipe=false;
Log.d(“刷卡”、“第一次刷卡”);
}else if(检查InternetForNewsfeed()&&!首次滑动){
fetchAllBooksByHeader();
firstSwipe=true;
Log.d(“刷卡”,“不是第一次刷卡”);
}否则{
myRecyclerview.showInfoLayout();
}
getActivity().setTitle(“Tëgjithë”);
}
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
Log.i(“NewsFeedFragment”,“Created”);
视图v=充气机。充气(R.layout.news\u feed\u fragment\u layout,container,false);
dialog=新建对话框(getActivity());
对话框.requestWindowFeature(窗口.FEATURE\u无\u标题);
dialog.getWindow().setBackgroundDrawable(新的ColorDrawable(Color.TRANSPARENT));
setContentView(R.layout.loading_layout);
myRecyclerview=(MyDynamicRecyclerView)v.findViewById(R.id.myRecyclerview);
modelArrayList=新建ArrayList();
testAdapter=新的NewsFeedAdapter(getActivity().getApplicationContext(),modelArrayList,(AppCompatActivity)getActivity(),this,false);
linearLayoutManager=新的linearLayoutManager(getActivity().getApplicationContext());
myRecyclerview.setScrollContainer(假);
myRecyclerview.setBackgroundColor(“#FFFFFF”);
myRecyclerview.setSwipeRefresh(true);
myRecyclerview.setColorSchemeColors(颜色.红色,颜色.黄色,颜色.黑色,颜色.绿色,颜色.蓝色);
myRecyclerview.setLoadMore(true,linearLayoutManager);
myRecyclerview.setLoadMoreListener(这个);
myRecyclerview.setOnRefreshListener(此);
myRecyclerview.setLayoutManager(linearLayoutManager);
setItemAnimator(新的DefaultItemAnimator());
myRecyclerview.SetImpleDivider(假);
myRecyclerview.setAdapter(testAdapter);
极限=0;
如果(检查InternetForNewsfeed()){
firstSwipe=false;
fetchAllBooksFromDB();
}否则{
firstSwipe=true;
myRecyclerview.showInfoLayout();
}
返回v;
}
public void fetchAllBooksByHeader(){
极限=0;
如果(modelArrayList.size()>=1){
removitems();
}
new FetchBooks(true.execute();
testAdapter.notifyDataSetChanged();
}
public void fetchAllBooksFromDB(){
如果(modelArrayList.size()>=1){
removitems();
}
new FetchBooks(false).execute();
testAdapter.notifyDataSetChanged();
}
公共void addHeader(){
if(modelArrayList.size()==0)
添加(新的ProgramModel());
}
public void addItem(字符串标题、字符串作者、字符串图像名){
添加(新的程序模型(标题、作者、图像名));
testAdapter.notifyDataSetChanged();
}
公共无效删除项(){
modelArrayList.clear();
addHeader();
}
@凌驾
公共void OnRefresh(){
getActivity().setTitle(“Tëgjithë”);
极限=0;
如果(选中InternetForNewsfeed()&第一次滑动){
removitems();
new FetchBooks(false).execute();
firstSwipe=false;
Log.d(“刷卡”、“第一次刷卡”);
}else if(检查InternetForNewsfeed()&&!首次滑动){
removitems();
new FetchBooks(true.execute();
Log.d(“刷卡”,“不是第一次刷卡”);
}否则{
myRecyclerview.showInfoLayout();
}
myRecyclerview.stopSwipeRefresh();
}
私有布尔值checkInternetForNewsFeed(){
if(新连接状态(getActivity()).isConnected()){
myRecyclerview.hideInfo布局();
返回true;
}否则{
//内容标题和消息的字体
Typeface messageTypeface=Typeface.createFromAsset(getActivity().getAssets(),“font/Roboto Light.ttf”);
Typeface titleTypeface=Typeface.createFromAsset(getActivity().getAssets(),“font/Roboto Bold.ttf”);
//设置内容
myRecyclerview.setInfoIcon(R.drawable.warning_图标,“#000000”);
myRecyclerview.setInfoTitle(“Nuk jeni i lidhur me internet.”,18,Color.GRAY,titleTypeface);
myRecyclerview.setInfoMessage(“Rifreskoni edhe njëherëpër tëkontrolluar Aksein nëinternet.”,13,Color.GRAY,message字体);
返回false;
}
}
@凌驾
public void OnLoadMore(){
new FetchBooks(true.execute();
MyDynamicToast.informationMessage(AppController.getInstance(),“…”);
}
公共静态无效hideLoadingDialogFromBookActivity(对话框d){
d、 隐藏();
}
私有类FetchBooks扩展异步任务{
私有布尔重载;
FetchBooks(布尔重新加载){
this.reload=重新加载;
}
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的Void doInBackground(Void…参数){
getBooksFromDB();
返回null;
}
私有void getBooksFromDB(){
StringRequestBooks=newStringRequest(Request.Method.GET,AppConfig.URL\u FETCH\u BOOKS,new Response.Listener()){
@凌驾
公众回应(Stri)
new FetchBooks(false).execute(); // runs in background and modifies list
testAdapter.notifyDataSetChanged(); // executes immediately
void setBooks(List<Book> books) {
  mBooks = books; // swap the whole list
  notifyDataSetChanged(); // notify of change
}