首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将微调器选择从主活动传递到databasehelper以运行查询,然后将结果传递给第二个活动?

如何将微调器选择从主活动传递到databasehelper以运行查询,然后将结果传递给第二个活动?
EN

Stack Overflow用户
提问于 2019-03-15 05:27:38
回答 1查看 0关注 0票数 0

我正在尝试创建一个用户在微调器上选择的小应用程序,选择将被发送到数据库帮助程序以运行选择查询,然后选择查询结果将在列表视图中显示在第二个活动上。

如果运行查询而不尝试使where函数工作或要传递的变量,我可以在listview中查看现有数据库数据库的所有结果,但我无法获得用户选择的微调器值的结果。

主要活动:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);

    }
}

第二项活动:

代码语言:javascript
复制
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);


        }
    }
EN

回答 1

Stack Overflow用户

发布于 2019-03-15 14:42:09

Listview一样,Spinner通过适配器填充,然后添加一个onItemSelected侦听器。你似乎也没做过。

请注意,onItemSelected事件将在用户选择项目之前启动,因为它必须设置默认选定项目,因此您可能需要禁止对此单个事件执行任何操作(下面的代码通过mERPSpinnerInitialiased变量处理此事件)。

所以你的MainActivity可能是: -

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {
    Spinner ERPSpinner;
    DatabaseHelper mydatabasehelper;
    Cursor mCsr;
    SimpleCursorAdapter mSCA;
    Context mContext;
    int mERPSpinnerInitialiased = 0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        ERPSpinner = (Spinner) this.findViewById(R.id.ERPSpinner);
        DatabaseHelper = new mydatabasehelper(this);
        manageERPSpinner();
    }

    private void manageERPSpinner() {
        mCsr = DatabaseHelper.getAllMyDataV2(); // Get the data for the spinner including the rowid column as column _ID
        if (mSCA == null) {
            mSCA = new SimpleCursorAdapter(
                    this,
                    android.R.layout.simple_spinner_item,
                    mCsr,
                    new String[]{DatabaseHelper5.COL_AUCTION_NAME},
                    new int[]{android.R.id.text1},
                    0
            );
            ERPSpinner.setAdapter(mSCA);
            ERPSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    //Skip defuly invocation when spinner is initialised
                    if (mERPSpinnerInitialiased++ > 0) {
                        /**
                         * Do what you need to do here e.g. start another activity
                         * passing the rowid (_id column) to the other activity allows all the data to be extracted from the db
                         */
                        Toast.makeText(mContext, "You selected row with id of " + String.valueOf(id), Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                }
            });
        } else {
            mSCA.swapCursor(mCsr);
        }
    }

    /**
     * Should always close a Cursor when done with it
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mCsr.close();
    }

    @Override
    protected void onResume() {
        super.onResume();
        manageERPSpinner();
    }
}

DatabaseHelper应该包括以下方法: -

代码语言:javascript
复制
public Cursor getAllMyDataV2() {
    SQLiteDatabase db = this.getWritableDatabase();
    String[] columns = new String[]{"*,rowid AS " + BaseColumns._ID};
    return db.query("USER_TABLE",columns,null,null,null,null,null);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档