繁体   English   中英

如何在 Android 中使用 SQLite 从微调器中根据选定的月份和年份从列中获取值?

[英]How can I get values from a column based on selected month and year from spinner using SQLite in Android?

所以,我有下面这段代码,来自我的 DatabaseOperations.java。 我想根据从HitungFinalBulanActivity.java中选择的月份和年份对 COLUMN_JUMLAH 中的所有值求和。

但在此之前,我想从选定的月份和年份微调器中选择 COLUMN_JUMLAH 值。

但是我对如何将所选总和值的结果显示到文本视图中感到困惑。 仅供参考,在我的表中,COLUMN_JUMLAH 初始化为字符串,我在 getAllValues() 方法中将值转换为 double 类型。

无论如何,我使用了带有存储在字符串数组中的值的微调器。

private Periode cursorToPeriode(Cursor cursor){
        Periode periode = new Periode();
        Log.v("info", "The getLONG " + cursor.getLong(0));
        Log.v("info", "The setLatLng " + cursor.getString(1) + "," + cursor.getString(2) + "," + cursor.getString(3) + "," + cursor.getString(4));
        periode.setId(cursor.getLong(0));
        periode.setAwalPeriode(cursor.getString(1));
        periode.setAkhirPeriode(cursor.getString(2));
        periode.setKeterangan(cursor.getString(3));
        periode.setJumlah(cursor.getString(4));
        return periode;
    }


    public ArrayList<Periode> getAllPeriode(){
        Cursor cursor = database.query(TABLE_PERIODE, allColumns, null,null,null,null,null);
        ArrayList<Periode> periodes = new ArrayList<>();
        cursor.moveToFirst();
        while (!cursor.isAfterLast()){
            Periode periode = cursorToPeriode(cursor);
            periodes.add(periode);
            cursor.moveToNext();
        cursor.close();
        return periodes;
    }

    public ArrayList<Periode> getJumlahPeriode(){
        Double jumlah;
        Cursor cursor = database.query(TABLE_PERIODE,null, COLUMN_JUMLAH , null,null,null,null,null);
        ArrayList<Periode> periodes = new ArrayList<>();
        cursor.moveToFirst();
        while (!cursor.isAfterLast()){
            Periode periode = cursorToPeriode(cursor);
            periodes.add(periode);
            cursor.moveToNext();
        }
        cursor.close();
        return periodes;
    }

    public int addAllValues(String bulan, String tahun){
        int total = 0;

        Cursor c = database.rawQuery("SELECT SUM(" + (Double.parseDouble(COLUMN_JUMLAH)) + ") FROM " + TABLE_PERIODE + " WHERE strftime('%Y'," + tahun + ") AND strftime('%M,'"+ bulan +")", null);
        if(c.moveToFirst()){
            total = c.getInt(0);
        }
        return total;
    }

这是我的HitungFinalBulanActivity.java:

package com.example.kalkulatorakuntansi;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import com.example.kalkulatorakuntansi.Adapter.DatabaseOperations;

import org.w3c.dom.Text;

import java.time.Year;
import java.util.ArrayList;
import java.util.Calendar;

public class HitungFinalBulanActivity extends AppCompatActivity {

    Spinner MonthSpinner;
    Spinner YearSpinner;
    TextView result, totalJumlah;
    Integer myDb;
    private DatabaseOperations transaksiOperations;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hitung_final_bulan);

        transaksiOperations = new DatabaseOperations(this);
        transaksiOperations.Open();

        MonthSpinner = findViewById(R.id.monthSpinner);
        YearSpinner = findViewById(R.id.yearspinner);

        totalJumlah = findViewById(R.id.txtViewJumlah);
        result = findViewById(R.id.txtViewHasilBulan);

        ArrayAdapter<CharSequence> MonthAdapter = ArrayAdapter.createFromResource(this,
                R.array.months_array, android.R.layout.simple_spinner_item);
        MonthAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        MonthSpinner.setAdapter(MonthAdapter);

        ArrayList<String> years = new ArrayList<String>();
        int thisYear = Calendar.getInstance().get(Calendar.YEAR);
        for (int i = 2010; i <= thisYear; i++) {
            years.add(Integer.toString(i));
        }

        ArrayAdapter<String> YearAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, years);
        YearSpinner.setAdapter(YearAdapter);

        myDb = transaksiOperations.addAllValues(MonthSpinner.getSelectedItem().toString(), YearSpinner.getSelectedItem().toString());

    }
}

我不确定代码是否有效,因为我已经尝试过但没有任何反应。 请帮我解决这个问题! 谢谢

这是错误:

E/AndroidRuntime:致命异常:主进程:com.example.kalkulatorakuntansi,PID:19866 java.lang.RuntimeException:无法启动活动 ComponentInfo {com.example.kalkulatorakuntansi/com.example.kalkulatorakuntansi.HitungFinalBulanActivity}:android.database。 sqlite.SQLiteException: near "01": syntax error (code 1): , 编译时: SELECT CAST(SUM(Jumlah)as Double) FROM tb_periode WHERE strftime('%Y',2010) AND strftime('%M,' 01) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 在 android.app.ActivityThread.-wrap11(Unknown Source:0) 在 android。 app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread .main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(R untimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: android.database.sqlite.SQLiteException: near "01": syntax error (code 1): , 而编译:SELECT CAST(SUM(Jumlah)as Double) FROM tb_periode WHERE strftime('%Y',2010) AND strftime('%M,'01) 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 在 android .database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890) 在 android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:501) 在 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 在android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) 在 android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37) 在 android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46) 在 android .database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1392) 在 android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1331)在 com.example.kalkulatorakuntansi.Adapter.DatabaseOperations.addAllValues(DatabaseOperations.java:167) 在 com.example.kalkulatorakuntansi.HitungFinalBulanActivity.onCreate(HitungFinalBulanActivity.java:55) 在 android.app.Activity.performCreate(Activity.java:7009) ) 在 android.app.Activity.performCreate(Activity.java:7000) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) 在 android.app .ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 在 android.app.ActivityThread.-wrap11(Unknown Source:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 在 android.os.Handler。 dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native方法)在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.andr oid.internal.os.ZygoteInit.main(ZygoteInit.java:807)

只需将结果放在 textview 中

myDb = transaksiOperations.addAllValues(MonthSpinner.getSelectedItem().toString(), YearSpinner.getSelectedItem().toString());

result.setText(myDb+""); // add this line to set text

和如果您想更改微调项选择的 textview 值。 把上面的代码放在 onItemSelected 中。

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        // your code here
    }

    @Override
    public void onNothingSelected(AdapterView<?> parentView) {
        // your code here
    }

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM