Сумма значений из базы данных в новом текстовом поле - PullRequest
0 голосов
/ 05 декабря 2018

У меня проблема с отображением общей суммы всех значений базы данных в одном текстовом поле.

Вот код из activity_main.xml

<TextView
        android:id="@+id/ukupno"
        android:layout_width="172dp"
        android:layout_height="94dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="212dp"
        android:layout_marginBottom="60dp"
        android:textAppearance="?android:textAppearanceLarge"
        android:textStyle="italic"
        tool:hint="Ukupno" />

Вот код из MainActivity.java

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String[] projection = {
            ArtiklContract.ArtiklEntry._ID,
            ArtiklContract.ArtiklEntry.COLUMN_IME_PROIZVODA,
            ArtiklContract.ArtiklEntry.COLUMN_CIJENA,
            ArtiklContract.ArtiklEntry.COLUMN_TRGOVINA,
            ArtiklContract.ArtiklEntry.COLUMN_KOLCINA};

    return new CursorLoader( this, ArtiklContract.ArtiklEntry.CONTENT_URI, projection, null, null, null );
}

А вот код из ArtiklCursorAdapter

@Override
    public void bindView(final View view, final Context context, Cursor cursor) {
        TextView nameView = view.findViewById( R.id.name_product );
        TextView priceView = view.findViewById( R.id.price_product );
        TextView quantityView = view.findViewById( R.id.quantity_product );
        TextView storeView = view.findViewById( R.id.product_store );
        TextView totalView = view.findViewById( R.id.total_price );


        int nameColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_IME_PROIZVODA );
        int priceColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_CIJENA );
        int quantityColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_KOLCINA );
        int storeColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_TRGOVINA );
        int totalColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_UKUPNO );
        final int productIdColumnIndex = cursor.getInt( cursor.getColumnIndex( ArtiklContract.ArtiklEntry._ID ) );

        String nameCurrent = cursor.getString( nameColumn );
        double priceCurrent = cursor.getDouble( priceColumn );
        final int quantityCurrent = cursor.getInt( quantityColumn );
        String storeCurrent = cursor.getString( storeColumn );
        double totalCurrent = priceCurrent * quantityCurrent;

        nameView.setText( nameCurrent );
        priceView.setText( String.valueOf( priceCurrent ) );
        totalView.setText( new DecimalFormat( "##.##" ).format( totalCurrent ) );
        storeView.setText( storeCurrent );
        quantityView.setText( String.valueOf( quantityCurrent ) );
    }

Теперь я хочу сложить все double totalCurrent из каждой строки и отобразить сумму в текстовом поле «укупно».

TY за помощь!

1 Ответ

0 голосов
/ 05 декабря 2018

Вы читаете только одну строку данных из курсора.Вы должны зацикливаться на курсоре

Грубо говоря:

@Override
public void bindView(final View view, final Context context, Cursor cursor) {
    TextView nameView = view.findViewById( R.id.name_product );
    TextView priceView = view.findViewById( R.id.price_product );
    TextView quantityView = view.findViewById( R.id.quantity_product );
    TextView storeView = view.findViewById( R.id.product_store );
    TextView totalView = view.findViewById( R.id.total_price );

    // check null and move the cursor to the first position
    if(cursor != null && !cursor.moveToFirst()){
         return; // fail early if there is no data or null
    }


    String nameCurrent = null;
    String storeCurrent = null; 
    double totalCurrent = 0; 

    // loop the contents
    while(!cursor.isAfterLast()){

        //.. start adding up your values here

        int nameColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_IME_PROIZVODA );
        int priceColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_CIJENA );
        int quantityColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_KOLCINA );
        int storeColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_TRGOVINA );
        int totalColumn = cursor.getColumnIndex( ArtiklContract.ArtiklEntry.COLUMN_UKUPNO );
         final int productIdColumnIndex = cursor.getInt( cursor.getColumnIndex( ArtiklContract.ArtiklEntry._ID ) );

        // Assuming you want only one name and store, I would check null
        nameCurrent = cursor.getString( nameColumn );
        storeCurrent = cursor.getString( storeColumn );

        int priceCurrent = cursor.getDouble( priceColumn );
        int quantityCurrent = cursor.getInt( quantityColumn );        
        totalCurrent += priceCurrent * quantityCurrent;

        // move the cursor
        cursor.moveToNext();
    }

    // these I am not sure apply so i commented them out
    //priceView.setText( String.valueOf( priceCurrent ) );
    //quantityView.setText( String.valueOf( quantityCurrent ) );

    nameView.setText( nameCurrent );
    storeView.setText( storeCurrent );
    totalView.setText( new DecimalFormat( "##.##" ).format( totalCurrent ) );
}

Это действительно грубо, но концепция верна.Вы хотите зациклить окно курсора и получить все записи для вычисления суммы.Я не уверен, как вы намереваетесь отображать эти вещи, но я бы на самом деле создал какой-нибудь массив и передал бы его в RecyclerView или ListView с помощью адаптера.

Удачи и счастливого кодирования!

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