Доступ к данным в `Model.class` из активности в Android - PullRequest
0 голосов
/ 02 июля 2019

В моем приложении есть задача, которую я хочу выполнить, это получение идентификаторов элементов из моей базы данных sqlite с использованием созданного мной Model.class, и я хочу использовать идентификаторы, полученные внутри действия, а не адаптера на этот раз, но я знаю только как сделать это с помощью адаптера. Хотя я собираюсь попробовать это в первый раз, и я даже не знаю, возможно ли это.

Это код, который я пробовал

 private ViewPager mViewPager;
ArrayList<Model> modelArrayList;
ArrayList<String>listItem;

RecyclerView recyclerView;
SongAdapter adapter;
int id = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    listItem = new ArrayList<>();

    SQLiteDbHelper dbHelper = new SQLiteDbHelper(this);
    dbHelper.openDatabase();
    modelArrayList  = dbHelper.getDetails();

    adapter = new SongAdapter(modelArrayList);

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main,menu);

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == R.id.action_search){
        Intent intent = new Intent(MainActivity.this,SearchActivity.class);
        startActivity(intent);
    }

    if (item.getItemId() == R.id.lacate){
        goToChapter();
    }

    if (item.getItemId() == R.id.locate){
        Intent intent = new Intent(MainActivity.this,ChaptersActivity.class);
        startActivity(intent);

    }

    return super.onOptionsItemSelected(item);
}

private void goToChapter() {
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this,R.style.AlertDialog);
    builder.setTitle("Enter Here :");

    final EditText goTo = new EditText(MainActivity.this);
    goTo.setHint("input number");
    builder.setView(goTo);

    builder.setPositiveButton("GO", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            String locate = goTo.getText().toString();

            if (!TextUtils.isEmpty(locate) ){
                if (!locate.equals(String.valueOf(modelArrayList.get(id).getChapter()))) {
                    Toast.makeText(MainActivity.this,"bad",Toast.LENGTH_LONG).show();

                } else {

                    Toast.makeText(MainActivity.this,"good",Toast.LENGTH_LONG).show();

                }
            }
        }
    });
    builder.show();

}

SQLiteDbHelper.class

 private static final int DATABASE_VERSION =1;
private static final String DATABASE_NAME = "FTChyme.sqlite";
private static final String DB_PATH_SUFFIX = "/databases/";
static Context mCtx;

SQLiteDbHelper(Context context){
    super(context,DATABASE_NAME,null,DATABASE_VERSION);
    mCtx = context;
}

public SQLiteDatabase openDatabase() throws SQLiteException{
    File dbFile = mCtx.getDatabasePath(DATABASE_NAME);
    if (!dbFile.exists()){
        try {
            CopyDatabaseFromAssests();
            Toast.makeText(mCtx,"copied from assest",Toast.LENGTH_LONG).show();
        }catch (IOException e){
            throw new RuntimeException("error occured",e);
        }
    }
    return SQLiteDatabase.openDatabase(dbFile.getPath(),null,SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase
            .CREATE_IF_NECESSARY);
}


public ArrayList<Model> getDetails(){
    SQLiteDatabase db = this.getReadableDatabase();
    ArrayList<Model> modelList = new ArrayList<>();

    Cursor cursor = db.rawQuery("SELECT * FROM hymes",null);
    if (cursor!=null){
        while (cursor.moveToNext()){
            Model count = new Model(cursor.getInt(0),cursor.getInt(1),cursor.getString(1),cursor.getString(2));
            modelList.add(count);
        }
        cursor.close();
        db.close();
    }
    return modelList;
}
public ArrayList<Model> getChapter(){
    SQLiteDatabase db = this.getReadableDatabase();
    ArrayList<Model> modelList = new ArrayList<>();

    Cursor cursor = db.rawQuery("SELECT * FROM hymes",null);
    if (cursor!=null){
        while (cursor.moveToNext()){
            Model count = new Model(cursor.getInt(0),cursor.getInt(1),cursor.getString(1),cursor.getString(2));
            modelList.add(count);
        }
        cursor.close();
        db.close();
    }
    return modelList;
}


public void CopyDatabaseFromAssests() throws IOException{
    InputStream myInput = mCtx.getAssets().open(DATABASE_NAME);
    String outFile = getDatabasePath();

    File f = new File(mCtx.getApplicationInfo().dataDir + DB_PATH_SUFFIX);
    if (!f.exists())
        f.mkdir();

    OutputStream myOutPut = new FileOutputStream(outFile);

    byte[] buffer = new byte[1024];
    int lenght;
    while ((lenght = myInput.read(buffer))>0){
        myOutPut.write(buffer,0,lenght);
    }
    myOutPut.flush();
    myOutPut.close();
    myInput.close();
}

private static String getDatabasePath() {
    return mCtx.getApplicationInfo().dataDir + DB_PATH_SUFFIX
            + DATABASE_NAME;
}


@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {


}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

}

но идентификатор зарегистрирован только на нулевое значение и ничего не извлекает из базы данных

...