Firebase не работает в первый раз? - PullRequest
0 голосов
/ 02 июля 2018

Я хочу сгенерировать отчет в формате pdf в расчете на общее количество заказов и заказов с желаемым статусом

У меня есть этот код для создания PDF и заполнения таблицы

private TemplatePDF templatePDF;

FirebaseDatabase database;
DatabaseReference reference;

Button btnRatio1;

ArrayList<String[]> rowqa=new ArrayList<>();

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

    database=FirebaseDatabase.getInstance();
    reference=database.getReference("Requests");

    btnRatio1=findViewById(R.id.Quality);

    btnRatio1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            reference.orderByChild("date").startAt("1530002755582").endAt("1530504865654").
                    addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            showData(dataSnapshot);
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

            createTemplate(rowqa);
        }
    });
}

private void showData(DataSnapshot dataSnapshot){

    int total=(int)dataSnapshot.getChildrenCount();
    int count=0;
    String[]row;
    for (DataSnapshot myDataSnapshot : dataSnapshot.getChildren())
    {
        Request rq = myDataSnapshot.getValue(Request.class);
        if (rq.getStatuscali().equals("0"))
        {
            count++;
        }
    }
    row= new String[]{Common.getDate(Long.parseLong("1529945980802")),String.valueOf(count),String.valueOf(total),""+ count/total};
    addRow(row);

}
private void createTemplate(ArrayList<String[]> rowqa) {
    TemplatePDF templatePDF1 = new TemplatePDF(getApplicationContext());
    templatePDF1.openDocument("Quality");
    templatePDF1.addTitles("Frutifelles E.I.R.L.","Calidad de pedidos generados","25/06/2018");
    templatePDF1.createTable(header,rowqa);
    templatePDF1.closeDocument();
    templatePDF1.viewPDF();
}

private void addRow(String[]row){
    rowqa.add(row);
}

Первый раз покажи мне мой pdf таким образом

enter image description here

Но второй раз покажи мне правильно

enter image description here

Кажется, в первый раз это не работает

1 Ответ

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

Как и сказал @Jen Person, вы должны поместить createTemplate(rowqa) в обратный вызов onDataChange, иначе, когда вы нажмете кнопку в первый раз, rowqa будет пустым, поэтому createTemplate(rowqa) получит пустое PDF.

пример:

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

    btnRatio1=findViewById(R.id.Quality);
    btnRatio1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          // dateStart, dateEnd should be instance fields
          queryData(dateStart, dateEnd);
        }
    });
}

private void queryData(String dateStart, String dateEnd) {
    database=FirebaseDatabase.getInstance();
    reference=database.getReference("Requests");
    reference.orderByChild("date")
            .startAt(dateStart)
            .endAt(dateEnd)
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    showData(dataSnapshot);
                    createTemplate(rowqa);
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                }
            });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...