Recyclerview не загружается при первом создании активности - PullRequest
0 голосов
/ 03 июля 2018

Я добавляю элементы в свой список утилизаторов из операции ADD, которая открывается нажатием кнопки в операции просмотра утилизатора. но когда я добавляю и закрываю операцию ADD, элемент не отображается в операции просмотра, пока я не закрою и снова не открою.

Я получаю идентификатор, если добавление сетевого вызова прошло успешно. Затем я добавляю идентификатор в sqlite, завершаю операцию ADD и возвращаюсь к своему виду повторного просмотра. Я получаю идентификатор из sqlite и передаю его функции сетевого вызова, чтобы получить свой элемент.

Это моя работа в Recyclerview

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_subscriptions);

    db = SubscriptionDB.getInstance(this);
    sessionDBHelper = new SessionDBHelper(this);
    idDB = IDsDB.getInstance(this);


    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.floatAddSub);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(Subscriptions.this, AddSubscription.class);
            startActivity(intent);

        }
    });

    customerID = idDB.getCustomerID();

    progressBar = findViewById(R.id.progress_bar);
    recyclerview = (RecyclerView) findViewById(R.id.subscription_recycler);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
    recyclerview.setLayoutManager(mLayoutManager);
    recyclerview.setItemAnimator(new DefaultItemAnimator());

    fetchInfo(customerID);
    if (subArrayList.size() > 0) {
        adapter = new SubRVAdapter(subArrayList, this, this.getSupportFragmentManager());
        subArrayList = db.getAll();
        recyclerview.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        progressBar.setVisibility(View.GONE);

    }
}

public void fetchInfo(String customerID) {
    apiInterface = RetrofitInstance.getRetrofitInstance().create(APIInterface.class);

    Call<ArrayList<SubObject>> call = apiInterface.getSubscription(customerID);

    progressBar.setVisibility(View.VISIBLE);

    call.enqueue(new Callback<ArrayList<SubObject>>() {
        @Override
        public void onResponse(Call<ArrayList<SubObject>> call, Response<ArrayList<SubObject>> response) {
            adapter = new SubRVAdapter(subArrayList, getApplicationContext(), getSupportFragmentManager());
            subArrayList = response.body();
            recyclerview.setAdapter(adapter);
            adapter.notifyDataSetChanged();
            progressBar.setVisibility(View.GONE);
            int statusCode = response.code();
            Log.d("onresponse", "" + statusCode);
        }

        @Override
        public void onFailure(Call<ArrayList<SubObject>> call, Throwable t) {
            progressBar.setVisibility(View.GONE);
            Log.d("onfailure", " " + t.getMessage());

            Toast.makeText(Subscriptions.this, "There is a network issue. Try again later.", Toast.LENGTH_SHORT).show();
            progressBar.setVisibility(View.GONE);

        }
    });
}



@Override
protected void onResume() {
    super.onResume();
    Log.d("onResume", "RESUME");

    fetchInfo(customerID);
    if (subArrayList.size() > 0) {
        adapter = new SubRVAdapter(subArrayList, this, this.getSupportFragmentManager());
        subArrayList = db.getAll();
        recyclerview.setAdapter(adapter);
        adapter.notifyDataSetChanged();

    }

}

ADD активность

 APIInterface apiInterface = RetrofitInstance.getRetrofitInstance().create(APIInterface.class);
                    AddSubscriptionModel addSubscriptionModel = new AddSubscriptionModel();
                    addSubscriptionModel.setStickerNumber(stickerNumber);
                    addSubscriptionModel.setPin(Pin);
                    addSubscriptionModel.setUsername(username);
                    addSubscriptionModel.setPassword(password);
                    addSubscriptionModel.setEmail(phone);

                    Call<ArrayList<SubModel>> activate = apiInterface.addSubscription(addSubscriptionModel);
                    activate.enqueue(new Callback<ArrayList<SubModel>>() {
                        @Override
                        public void onResponse(Call<ArrayList<SubModel>> call, Response<ArrayList<SubModel>> response) {

                            if (response.isSuccessful()) {
                                int statusCode = response.code();

                                subsscriptions = response.body();

                                    String cusID = subsscriptions.get(0).getCustomer_id();
                                    String subID = subsscriptions.get(0).getSubscription_id();

                                    idDB.addCustomerID(cusID, subID);


                                }

                                Toast.makeText(AddSubscription.this, "SUCCESS", Toast.LENGTH_SHORT).show();
                                progressBar.setVisibility(View.GONE);
                                Log.d("onresponse", "" + statusCode);
                            }
                        }



                        @Override
                        public void onFailure(Call<ArrayList<SubModel>> call, Throwable t) {

                            Toast.makeText(AddSubscription.this, "Network issues", Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);
                            Log.d("onfailure"," " +  t . getMessage());


                        }
                    });

            finish();
        }
    });

ссылка на logcat

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Сделай так, я только что отредактировал твой код

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_subscriptions);

db = SubscriptionDB.getInstance(this);
sessionDBHelper = new SessionDBHelper(this);
idDB = IDsDB.getInstance(this);


FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.floatAddSub);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        Intent intent = new Intent(Subscriptions.this, AddSubscription.class);
        startActivity(intent);

    }
});

customerID = idDB.getCustomerID();

progressBar = findViewById(R.id.progress_bar);
recyclerview = (RecyclerView) findViewById(R.id.subscription_recycler);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
recyclerview.setLayoutManager(mLayoutManager);
recyclerview.setItemAnimator(new DefaultItemAnimator());

fetchInfo(customerID);

}

private void loadDataInRecyclerView(){
    //if you have already data loaded from API then why are you again loading data from db.getAll();
    //if this is not necessary try commenting it
    subArrayList = db.getAll();
    adapter = new SubRVAdapter(subArrayList, this, this.getSupportFragmentManager());
    recyclerview.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}

public void fetchInfo(String customerID) {
apiInterface = RetrofitInstance.getRetrofitInstance().create(APIInterface.class);
Call<ArrayList<SubObject>> call = apiInterface.getSubscription(customerID);
progressBar.setVisibility(View.VISIBLE);
call.enqueue(new Callback<ArrayList<SubObject>>() {
    @Override
    public void onResponse(Call<ArrayList<SubObject>> call, Response<ArrayList<SubObject>> response) {
        adapter = new SubRVAdapter(subArrayList, getApplicationContext(), getSupportFragmentManager());
        subArrayList = response.body();
        progressBar.setVisibility(View.GONE);
        int statusCode = response.code();
        if(subArrayList.size()==0){
            Log.i("No data" , "Inside Response : " + "");
        }else{
            loadDataInRecyclerView();
        }

        Log.d("onresponse", "" + statusCode);
    }

    @Override
    public void onFailure(Call<ArrayList<SubObject>> call, Throwable t) {
        progressBar.setVisibility(View.GONE);
        Log.d("onfailure", " " + t.getMessage());

        Toast.makeText(Subscriptions.this, "There is a network issue. Try again later.", Toast.LENGTH_SHORT).show();
        progressBar.setVisibility(View.GONE);

    }
});
}



@Override
protected void onResume() {
super.onResume();
Log.d("onResume", "RESUME");
fetchInfo(customerID);
if (subArrayList.size() > 0) {
    recyclerview.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}}

Дайте мне знать, если это работает. К вашему сведению, я выполнил некоторое редактирование в методе onCreate(), и ваш метод fetchInfo() также обратите внимание на мои комментарии в fetchInfo() методе

0 голосов
/ 03 июля 2018

Вы можете начать деятельность с таким результатом

fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(Subscriptions.this, AddSubscription.class);
        startActivityForResult(intent,1);
    }
});

Вы получите результат, когда закончите ADD активность

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    customerID = idDB.getCustomerID();
    fetchInfo(customerID);
    if (subArrayList.size() > 0) {
        adapter = new SubRVAdapter(subArrayList, this, this.getSupportFragmentManager());
        subArrayList = db.getAll();
        recyclerview.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        progressBar.setVisibility(View.GONE);
    }
}

а также вам нужно подождать, пока вы не получите ответ API, после того, как вы сможете завершить ADD-активность

Call<ArrayList<SubModel>> activate = apiInterface.addSubscription(addSubscriptionModel);
activate.enqueue(new Callback<ArrayList<SubModel>>() {
    @Override
    public void onResponse(Call<ArrayList<SubModel>> call, Response<ArrayList<SubModel>> response) {
        if (response.isSuccessful()) {
            int statusCode = response.code();
            subsscriptions = response.body();
            String cusID = subsscriptions.get(0).getCustomer_id();
            String subID = subsscriptions.get(0).getSubscription_id();
            idDB.addCustomerID(cusID, subID);
        }
        Toast.makeText(AddSubscription.this, "SUCCESS", Toast.LENGTH_SHORT).show();
        progressBar.setVisibility(View.GONE);
        Log.d("onresponse", "" + statusCode);
        finish(); <-- add this
    }

    @Override
    public void onFailure(Call<ArrayList<SubModel>> call, Throwable t) {
        Toast.makeText(AddSubscription.this, "Network issues", Toast.LENGTH_SHORT).show();
        progressBar.setVisibility(View.GONE);
        Log.d("onfailure"," " +  t . getMessage());
        finish(); <-- add this
    }
});
//finish(); <-- remove this
...