Как передать выбор счетчика из основного действия в помощник базы данных для выполнения запроса, а затем передать результаты во второе действие? - PullRequest
0 голосов
/ 14 марта 2019

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

Если выполнить запрос, не пытаясь заставить работать функцию where или передаваемую переменную, я могу увидеть все результаты из моей существующей базы данных в виде списка, но не могу просто получить результатыдля выбранного пользователем значения счетчика.

Основная активность:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private DatabaseHelper mydatabasehelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mydatabasehelper = new DatabaseHelper(this);
    }

    private static final String ERPSelect = "ERPS";
    public void toastMe(View view){
        // Toast myToast = Toast.makeText(this, message, duration);
        Spinner ERPSpinner = (Spinner)findViewById(R.id.ERPSpinner);
        String ERPS = ERPSpinner.getSelectedItem().toString();
        String ERPforQuery = ERPSpinner.getSelectedItem().toString();
        mydatabasehelper.getAllMyData(ERPforQuery);
        Toast myToast = Toast.makeText(this, ERPS.toString(),
                Toast.LENGTH_SHORT);
        myToast.show();
        Intent TestIntent = new Intent (this, SecondActivity.class);
        TestIntent.putExtra(ERPSelect,ERPS);
        startActivity(TestIntent);
    }


}

DatabaseHelper:

import android.database.sqlite.SQLiteOpenHelper;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.Cursor;
import android.provider.BaseColumns;


import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.InputStream;
import java.io.IOException;

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "SystemDBforApp.db";
    private static final int DATABASE_VERSION = 1;
    private static String DATABASE_PATH;
    private final Context context;
    SQLiteDatabase db;


    public final static String USER_TABLE = "Systems";
    public final static String USER_SYSTEM_COLUMN = "System";
    public final static String USER_REPORT_COLUMN = "Report";
    public final static String USER_ADDTL_COLUMN = "Additional Info";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context = context;
        DATABASE_PATH = context.getDatabasePath(DATABASE_NAME).getPath(); 
        createDb();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

    public void createDb() {
        boolean dbExist = checkDbExist();

        if (!dbExist) {
            //this.getReadableDatabase(); 
            copyDatabase();
        }
    }

    private boolean checkDbExist() {

        File db = new File(DATABASE_PATH);
        if (!db.exists()) {
            if(!new File(db.getParent()).exists()) {
                new File(db.getParent()).mkdirs();
            }
            return false;
        } else {
            return true;
        }

        /* Done away with unreliable method
        SQLiteDatabase sqLiteDatabase = null;
        try {
            String path = DATABASE_PATH;
            sqLiteDatabase = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
        } catch (Exception ex) {
        }
        if (sqLiteDatabase != null) {
            sqLiteDatabase.close();
            return true;
        }
        return false;
        */
    }

    private void copyDatabase() {
        try {
            InputStream inputStream = context.getAssets().open(DATABASE_NAME);
            String outFileName = DATABASE_PATH;
            OutputStream outputStream = new FileOutputStream(outFileName);

            byte[] b = new byte[1024];
            int length;
            while ((length = inputStream.read(b)) > 0) {
                outputStream.write(b, 0, length);
            }
            outputStream.flush();
            outputStream.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private SQLiteDatabase openDatabase() {
        String path = DATABASE_PATH;
        db = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READWRITE);
        return db;
    }

    public void close() {
        if (db != null) {
            db.close();
        }
    }


    public Cursor getAllMyData(String ERPforQuery) {
        String query2 = "SELECT * FROM " + USER_TABLE + " Where " + USER_SYSTEM_COLUMN + "=" +"'" + ERPforQuery + "'";
        SQLiteDatabase db = this.getWritableDatabase();
        String[] columns = new String[]{"*,rowid AS " + BaseColumns._ID};
        return db.rawQuery(query2,null);

    }
}

Вторая активность:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.database.Cursor;
import android.content.Context;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class SecondActivity extends AppCompatActivity {
    DatabaseHelper mDBHlpr;
    Cursor mCsr;
    ListView mUserList;
    SimpleCursorAdapter mSCA;
    Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        mContext = this;
        mUserList = this.findViewById(R.id.userlist); //<<<<<<<<<< id of the ListView
        mDBHlpr = new DatabaseHelper(this); //Instantiate the database helper
        setupOrRefreshTheListView();
        ShowERP();
    }

    private static final String ERPSelect = "ERPS";

    public void ShowERP() {

        TextView headingView = (TextView)
               findViewById(R.id.textview_label);

        String ERPS = getIntent().getStringExtra(ERPSelect);
        headingView.setText("Recommended Reports: " + ERPS);
    }

    private void setupOrRefreshTheListView() {
        mCsr =  mDBHlpr.getAllMyData(); //getting an error getAllMyData
                                        //(String)
                                        //      in DatabaseHelper cannot be 
                                        //applied
                                        //    to
                                        //() 
        if (mSCA == null) {
            mSCA = new SimpleCursorAdapter(
                    this,
                    android.R.layout.simple_list_item_2,
                    mCsr,

                    new String[]{
                            DatabaseHelper.USER_REPORT_COLUMN,
                            DatabaseHelper.USER_ADDTL_COLUMN,
                    },
                    new int[]{
                            android.R.id.text1,
                            android.R.id.text2},
                    0
            );
            mUserList.setAdapter(mSCA);


        }
    }
...