Запускать код один раз, когда приложение запускается фрагментом - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть Mainactivity, где я использовал несколько фрагментов, которые извлекают изображения и текст, когда он-лайн в формате json, а также сохраняет и обновляет информацию, когда устройство находится в автономном режиме, оно отображает те же самые сохраненные данные.

Проблема заключается в том, когда япроводите между фрагментами, когда онлайн каждый раз, когда он начинает получать данные из онлайн, и это занимает много времени.Так что это раздражает.Я ищу решение, которое, когда приложение открыто, тогда только ищет онлайн данные и затем показывает Данные из сохраненной базы данных.

Ниже мой код

public class technology extends Fragment implements techTAdapter.FlowerClickListener, techTFetchListener {

private techTManager mManager;
private techTAdapter mFlowerAdapter;
private techTDatabase mDatabase;
private Button mReload;
private ProgressDialog mDialog;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_main, container, false);
    loadFlowerFeed();

    return view;
}

private void loadFlowerFeed() {

    mDialog = new ProgressDialog(getActivity());
    mDialog.setMessage("Loading information..");
    mDialog.setCancelable(true);
    mDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    mDialog.setIndeterminate(true);

    mFlowerAdapter.reset();

    mDialog.show();

    if (getNetworkAvailability()) {
        getFeed();
    } else {
        getFeedFromDatabase();
    }
}

private void getFeedFromDatabase() {
    mDatabase.fetchFlowers(this);
}

public void getFeed() {

    Call<List<techT>> listCall = mManager.getFlowerService().getAllFlowers();
    listCall.enqueue(new Callback<List<techT>>() {
        @Override
        public void onResponse(Call<List<techT>> call, Response<List<techT>> response) {
            if (response.isSuccessful()) {
                List<techT> flowerList = response.body();

                for (int i = 0; i < flowerList.size(); i++) {
                    techT flower = flowerList.get(i);
                     technology.SaveIntoDatabase task = new technology.SaveIntoDatabase();
                     task.execute(flower);

                    mFlowerAdapter.addFlower(flower);
                }
            } else {
                int sc = response.code();
                switch (sc) {
                    case 400:
                        Log.e("Error 400", "Bad Request");
                        break;
                    case 404:
                        Log.e("Error 404", "Not Found");
                        break;
                    default:
                        Log.e("Error", "Generic Error");
                }
            }
            mDialog.dismiss();
        }

        @Override
        public void onFailure(Call<List<techT>> call, Throwable t) {
            mDialog.dismiss();
            Toast.makeText(getActivity(), t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
}

public class SaveIntoDatabase extends AsyncTask<techT, Void, Void> {


    private final String TAG = technology.SaveIntoDatabase.class.getSimpleName();

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

    @Override
    protected Void doInBackground(techT... params) {

        techT flower = params[0];

        try {
            InputStream stream = new URL(techTConstant.HTTP.BASE_URL + "/photos/" + flower.getPhoto()).openStream();
            Bitmap bitmap = BitmapFactory.decodeStream(stream);
            flower.setPicture(bitmap);
            mDatabase.addFlower(flower);

        } catch (Exception e) {
            Log.d(TAG, e.getMessage());
        }

        return null;
    }
}

}

и заранее спасибо.Дайте мне знать, если вам нужна дополнительная информация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...