So, I have this code below which from my DatabaseOperations.java. I want to sum all values from COLUMN_JUMLAH based on month and year selected from HitungFinalBulanActivity.java.
But before that, I want to select COLUMN_JUMLAH values from selected month and year spinner.
But I got confused on how to show the result of selected sum values into a textview. FYI, in my table, COLUMN_JUMLAH initialised as a String, and I convert the values into double type in getAllValues() method.
Anyway, I used spinner with values stored in string array.
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;
}
And here is my 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());
}
}
I'm not sure the code will work, cause I've tried it and nothing happen. Please help me to solve this! Thank you
Here's the error:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.kalkulatorakuntansi, PID: 19866 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kalkulatorakuntansi/com.example.kalkulatorakuntansi.HitungFinalBulanActivity}: android.database.sqlite.SQLiteException: near "01": syntax error (code 1): , while compiling: SELECT CAST(SUM(Jumlah)as Double) FROM tb_periode WHERE strftime('%Y',2010) AND strftime('%M,'01) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at 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): , while compiling: SELECT CAST(SUM(Jumlah)as Double) FROM tb_periode WHERE strftime('%Y',2010) AND strftime('%M,'01) at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:501) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1392) at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1331) at com.example.kalkulatorakuntansi.Adapter.DatabaseOperations.addAllValues(DatabaseOperations.java:167) at com.example.kalkulatorakuntansi.HitungFinalBulanActivity.onCreate(HitungFinalBulanActivity.java:55) at android.app.Activity.performCreate(Activity.java:7009) at android.app.Activity.performCreate(Activity.java:7000) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.andr oid.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Just put your result in textview
myDb = transaksiOperations.addAllValues(MonthSpinner.getSelectedItem().toString(), YearSpinner.getSelectedItem().toString());
result.setText(myDb+""); // add this line to set text
and If you want to change textview value on spinner item selection. put above code in 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
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.