当前位置: 首页 > 知识库问答 >
问题:

如何使用Android中的SQLite从spinner中基于所选月份和年份的列中获取值?

施越彬
2023-03-14

下面是我的数据库操作代码。Java语言我想根据从HitungFinalbulanacitivity中选择的月份和年份,对列\u JUMLAH中的所有值求和。Java语言

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

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

无论如何,我使用了spinner和存储在字符串数组中的值。

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;
    }

这是我的HitungFinalbulanacitivity。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。实例kalkulatorakuntansi,PID:19866爪哇。lang.RuntimeException:无法启动活动组件信息{com.example.kalkulatorakuntansi/com.example.kalkulatorakuntansi.hitungfinalbulanacitivity}:android。数据库sqlite。SQLiteException:接近“01”:语法错误(代码1),编译时:从tb\U periode中选择CAST(SUM(Jumlah)作为Double),其中strftime('%Y',2010)和strftime('%M,'01)在android上。应用程序。ActivityThread。在android上执行LaunchActivity(ActivityThread.java:2778)。应用程序。ActivityThread。android上的handleLaunchActivity(ActivityThread.java:2856)。应用程序。ActivityThread-android上的wrap11(未知源:0)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1589)。操作系统。处理程序。android上的dispatchMessage(Handler.java:106)。操作系统。活套。android上的loop(Looper.java:164)。应用程序。ActivityThread。java上的main(ActivityThread.java:6494)。朗,反思一下。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodandArgscaler。在com上运行(RuntimeInit.java:438)。Android内部的操作系统。合子岩。main(ZygoteInit.java:807)由:android引起。数据库sqlite。SQLiteException:接近“01”:语法错误(代码1),编译时:从tb\U periode中选择CAST(SUM(Jumlah)作为Double),其中strftime('%Y',2010)和strftime('%M,'01)在android上。数据库sqlite。SQLiteConnection。android上的nativePrepareStatement(本机方法)。数据库sqlite。SQLiteConnection。android上的acquirePreparedStatement(SQLiteConnection.java:890)。数据库sqlite。SQLiteConnection。在android上准备(SQLiteConnection.java:501)。数据库sqlite。SQLiteSession。在android上准备(SQLiteSession.java:588)。数据库sqlite。SQLITE程序。(SQLiteProgram.java:58)在android上。数据库sqlite。SQLiteQuery。(SQLiteQuery.java:37)在android上。数据库sqlite。SQLiteDirectCursorDriver。android上的查询(SQLiteDirectCursorDriver.java:46)。数据库sqlite。SQLiteDatabase。android上的rawQueryWithFactory(SQLiteDatabase.java:1392)。数据库sqlite。SQLiteDatabase。com上的rawQuery(SQLiteDatabase.java:1331)。实例kalkulatorakuntansi。适配器。数据库操作。com上的addAllValues(DatabaseOperations.java:167)。实例kalkulatorakuntansi。HitungFinalbulanacity公司。android上的onCreate(hitungfinalbulanacitivity.java:55)。应用程序。活动在android上执行创建(Activity.java:7009)。应用程序。活动在android上执行创建(Activity.java:7000)。应用程序。仪器仪表。android上的callActivityOnCreate(Instrumentation.java:1214)。应用程序。ActivityThread。在android上执行LaunchActivity(ActivityThread.java:2731)。应用程序。ActivityThread。handleLaunchActivity(ActivityThread.java:2856)

共有1个答案

全飞扬
2023-03-14

只需将您的结果放在文本视图中

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
    }

});
 类似资料:
  • 问题内容: 我正在做一些报告,我想获取特定月份(例如2014年1月)中的所有日期,以及执行此“ SQL”时的日期: 我想得到这个清单: 如果我这样做“ SQL”: 我想得到这个清单: 如果我这样做“ SQL”: 我想得到这个清单: 这有可能吗,还是我应该自己为下一个100年绘制日期表:) 问题答案: 这是此问题的mysql / java解决方案。 创建表语句: Java代码: 我使用此sql获取日

  • 例子: 例如:String str=“11/20”(MM/yy)希望通过在Java中以上述格式传递字符串来获取月份名称和年份(例如:11月/20)

  • 我想得到两年之间的所有月份,以及两年之间的所有月份,他们的所有数据都将相加,以得到每年的销售额。 以下是我的表格截图: 截图 例如,我想获得2016年至2017年的年销售额,我需要将名称中包含2016年和2017年的所有列相加,以获得年销售额。我知道这张表不是正常的或正常的。但是这张桌子不是我的。 以下是获取两个日期之间月份的示例代码:

  • 问题内容: 我对Javascript不太了解,我发现的其他问题与日期操作有关,不仅是在需要时获取信息。 目的 我希望获得以下格式的日期: 2011年1月27日星期四17:42:21打印 到目前为止,我得到以下信息: 我现在需要知道如何获取星期几和一年中的月份(它们的名称)。 有没有一种简单的方法可以做到这一点,或者我应该考虑使用可以简单地使用和索引到正确值的数组? 问题答案: 是的,您需要数组。

  • 问题内容: 我需要像’Jan 2008’这样的SQL Server中日期时间的月份+年。我按月,年对查询进行分组。我已经搜索并找到了datepart,convert等功能,但是似乎没有一个有用的功能。我在这里想念什么吗?有这个功能吗? 问题答案: 如果您想让它们以字符串形式返回,则应采用这种格式; 这是其他格式选项