База данных SQLite: мое приложение не показывает извлеченные / сохраненные данные без подключения к интернету - PullRequest
0 голосов
/ 18 декабря 2018

Друзья, есть кто-нибудь, кто помогает мне с базой данных SQLite?Я новичок в Android, поэтому я задаю вопрос здесь.Я создал приложение с панелью администратора / онлайн-сервером и добавил в приложение базу данных SQLite для сохранения извлеченных данных в приложение.

Однако в моем приложении есть проблема, приложение не сохраняет извлеченные данныеДанные для приложения, но я не знаю, почему.Может кто-нибудь помочь мне выяснить, что не так с кодом?

Класс базы данных:

public class OfflineDatabase extends SQLiteOpenHelper {

    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "offlinedata.db";
    public static final String TABLE_OFFLINE_NAME = "tblOffline";

    public static final String KEY_ID = "id";
    public static final String KEY_ACTIVITY_NAME = "activity_name";
    public static final String KEY_OFFLINE_DATA = "offline_data";


    public OfflineDatabase(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String CREATE_FAVOURITE_TABLE = "CREATE TABLE " + TABLE_OFFLINE_NAME + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
                + KEY_ACTIVITY_NAME + " TEXT,"
                + KEY_OFFLINE_DATA + " TEXT)";

        db.execSQL(CREATE_FAVOURITE_TABLE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_OFFLINE_NAME);
        // Create tables again
        onCreate(db);
    }



    public long addOfflineData( ContentValues contentvalues, String s1) {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.insert(TABLE_OFFLINE_NAME, s1, contentvalues);
    }


    public String getOfflineData(String activity_name) {
        boolean count = false;
        SQLiteDatabase db = this.getWritableDatabase();
        String[] args = new String[]{activity_name};
        Cursor cursor = db.rawQuery("SELECT "+KEY_OFFLINE_DATA+" FROM "+TABLE_OFFLINE_NAME+"  WHERE "+KEY_ACTIVITY_NAME+"=? ", args);
        if (cursor.moveToFirst()) {
            //count = true;
            return cursor.getString(cursor.getColumnIndexOrThrow(KEY_OFFLINE_DATA));
        }
        cursor.close();
        db.close();
        return "";
        //return count;
    }

    public void update(String activity_name,ContentValues contentvalues) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.update(TABLE_OFFLINE_NAME, contentvalues, KEY_ACTIVITY_NAME+" = '"+activity_name+"'", null);
        db.close();
    }

    public void removeAll() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("DELETE FROM "+TABLE_OFFLINE_NAME);

        db.close();
    }
}

Класс фрагмента:

public class FragmentCategory extends Fragment {

    private View root_view, parent_view;
    private RecyclerView recyclerView;
    private SwipeRefreshLayout swipeRefreshLayout;
    private AdapterCategory adapterCategory;
    public static final String EXTRA_OBJC = "key.EXTRA_OBJC";
    private Call<CallbackCategories> callbackCall = null;
    private StaggeredGridLayoutManager gaggeredGridLayoutManager;
    DatabaseHandlerFavorite databaseHandler;
    private InterstitialAd interstitialAd;
    private OfflineDatabase databaseHelper;

    int counter = 1;



    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        root_view = inflater.inflate(R.layout.fragment_category, null);
        parent_view = getActivity().findViewById(R.id.main_content);


        loadInterstitialAd();

        swipeRefreshLayout = (SwipeRefreshLayout) root_view.findViewById(R.id.swipe_refresh_layout_category);
        swipeRefreshLayout.setColorSchemeResources(R.color.orange, R.color.green, R.color.blue, R.color.red);

        recyclerView = (RecyclerView) root_view.findViewById(R.id.recyclerViewCategory);
        recyclerView.setHasFixedSize(true);



        gaggeredGridLayoutManager = new StaggeredGridLayoutManager(1, 1);
        recyclerView.setLayoutManager(gaggeredGridLayoutManager);





        //set data and list adapter
        adapterCategory = new AdapterCategory(getActivity(), new ArrayList<Category>());
        recyclerView.setAdapter(adapterCategory);
        databaseHelper          = new OfflineDatabase(getActivity());


        adapterCategory.setOnItemClickListener(new AdapterCategory.OnItemClickListener() {
            @Override
            public void onItemClick(View v, Category obj, int position) {
                Intent intent = new Intent(getActivity(), ActivityDetailCategory.class);
                intent.putExtra(EXTRA_OBJC, obj);
                startActivity(intent);

                showInterstitialAd();
            }
        });

        // on swipe list
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                adapterCategory.resetListData();
                requestAction();
            }
        });

        requestAction();

        return root_view;
    }


    private void displayApiResult(final List<Category> categories) {
        adapterCategory.setListData(categories);
        swipeProgress(false);
        if (categories.size() == 0) {
            showNoItemView(true);
        }
    }

    private void requestCategoriesApi() {
        ApiInterface apiInterface = RestAdapter.createAPI();
        callbackCall = apiInterface.getAllCategories();
        callbackCall.enqueue(new Callback<CallbackCategories>() {
            @Override
            public void onResponse(Call<CallbackCategories> call, Response<CallbackCategories> response) {
                CallbackCategories resp = response.body();
                if (resp != null && resp.status.equals("ok")) {
                    displayApiResult(resp.categories);
                } else {
                    onFailRequest();
                }
            }

            @Override
            public void onFailure(Call<CallbackCategories> call, Throwable t) {
                if (!call.isCanceled()) onFailRequest();
            }

        });
    }

    private void onFailRequest() {
        swipeProgress(false);
        if (NetworkCheck.isConnect(getActivity())) {
        } else {

                //showToast("Internet Not");
                if(databaseHelper.getOfflineData("FragmentCategory").length()!=0) {
                    setJson(databaseHelper.getOfflineData("FragmentCategory"),false);
                }
            }

            //databaseHelper.removeAll();
        }


    public void setJson(String result, Boolean isOnline) {
        try {

        } catch(Exception e) {

        } finally {

        }

            //inseting result to database
            if(isOnline) {
                ContentValues offline_data = new ContentValues();

                offline_data.put(OfflineDatabase.KEY_OFFLINE_DATA, result);

                if(databaseHelper.getOfflineData("FragmentCategory").length()!=0) {
                    databaseHelper.update("FragmentCategory",offline_data);
                } else {
                    offline_data.put(OfflineDatabase.KEY_ACTIVITY_NAME, "FragmentCategory");
                    databaseHelper.addOfflineData(offline_data, null);
                }
            }}




    private class HomeSlider extends AsyncTask<String, Void, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

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

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (null == result || result.length() == 0) {
            } else {
                setJson(result,true);
                //myTest(result);
            }
        }
    }



    private void requestAction() {
        showFailedView(false, "");
        swipeProgress(true);
        showNoItemView(false);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                requestCategoriesApi();
            }
        }, Constant.DELAY_TIME);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        swipeProgress(false);
        if(callbackCall != null && callbackCall.isExecuted()){
            callbackCall.cancel();
        }
    }

    private void showFailedView(boolean flag, String message) {
        View lyt_failed = (View) root_view.findViewById(R.id.lyt_failed_category);
        ((TextView) root_view.findViewById(R.id.failed_message)).setText(message);
        if (flag) {
            recyclerView.setVisibility(View.GONE);
            lyt_failed.setVisibility(View.VISIBLE);
        } else {
            recyclerView.setVisibility(View.VISIBLE);
            lyt_failed.setVisibility(View.GONE);
        }
        ((Button) root_view.findViewById(R.id.failed_retry)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                requestAction();
            }
        });
    }

    private void showNoItemView(boolean show) {
        View lyt_no_item = (View) root_view.findViewById(R.id.lyt_no_item_category);
        ((TextView) root_view.findViewById(R.id.no_item_message)).setText(R.string.no_category_found);
        if (show) {
            recyclerView.setVisibility(View.GONE);
            lyt_no_item.setVisibility(View.VISIBLE);
        } else {
            recyclerView.setVisibility(View.VISIBLE);
            lyt_no_item.setVisibility(View.GONE);
        }
    }

    private void swipeProgress(final boolean show) {
        if (!show) {
            swipeRefreshLayout.setRefreshing(show);
            return;
        }
        swipeRefreshLayout.post(new Runnable() {
            @Override
            public void run() {
                swipeRefreshLayout.setRefreshing(show);
            }
        });
    }

    private int dpToPx(int dp) {
        Resources r = getResources();
        return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()));
    }

    private void loadInterstitialAd() {
        if (Config.ENABLE_ADMOB_INTERSTITIAL_ADS) {
            interstitialAd = new InterstitialAd(getActivity());
            interstitialAd.setAdUnitId(getResources().getString(R.string.admob_interstitial_unit_id));
            interstitialAd.loadAd(new AdRequest.Builder().build());
            interstitialAd.setAdListener(new AdListener() {
                @Override
                public void onAdClosed() {
                    interstitialAd.loadAd(new AdRequest.Builder().build());
                }
            });
        } else {
            Log.d("AdMob", "AdMob Interstitial is Disabled");
        }
    }

    private void showInterstitialAd() {
        if (Config.ENABLE_ADMOB_INTERSTITIAL_ADS) {

            if (interstitialAd != null && interstitialAd.isLoaded()) {

                if (counter == Config.ADMOB_INTERSTITIAL_ADS_INTERVAL) {
                    interstitialAd.show();
                    counter = 1;
                } else {
                    counter++;
                }

            } else {
                Log.d("AdMob", "Interstitial Ad is Disabled");
            }
        } else {
            Log.d("AdMob", "AdMob Interstitial is Disabled");
        }
    }}
...