Отображение нескольких таблиц из sqlDatabase - PullRequest
0 голосов
/ 24 октября 2018

Я разрабатываю цитату приложения и использую локальную базу данных для импорта цитат.
Это 4 таблицы, созданные в sqldatabase.

введите описание изображения здесь

и здесь в совокупности Таблица базы данных

моя таблица называется "be.db". Я помещаю ее в папку активов в Android Studio

, как вы можетесм. на рисунке заголовок «Жизнь» имеет более 1 цитаты, потому что в приложении, когда я хочу щелкнуть элемент «жизнь», я хочу, чтобы он показывал мне первую цитату, а затем я переходил к другой цитате, находящейся в передней части приложения.

первая страница приложения

проблема, я не знаю, как импортировать несколько или 3 таблицы из базы данных sqldatabase, я знаю только, как импортировать одну из них, как вы можете видеть ниже, это мойкод в моем классе "DatabaseHelper" в Android Studio:

public class DataBaseHelper extends SQLiteOpenHelper {



public static final String DBNAME="be.db";
public static final String DBLOCATION=Environment.getDataDirectory()+"/data/com.example.z210.story/databases/";

private Context mcontext;
private SQLiteDatabase mDatabase;


public DataBaseHelper(Context context) {
    super(context,DBNAME,null,1);
    this.mcontext=context;
}

@Override
public void onCreate(SQLiteDatabase db) {
}

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


public void openDatabase() {
    //l'acces au notre base de donnees
    String dbPath=mcontext.getDatabasePath(DBNAME).getPath();
    if(mDatabase!=null && mDatabase.isOpen()){
        return;
    }
    mDatabase=SQLiteDatabase.openDatabase(dbPath,null,SQLiteDatabase.OPEN_READWRITE);
}

public void closeDatabbase(){

    if(mDatabase !=null){
        mDatabase.close();
    }
}



public ArrayList getAllTitles(){
    ArrayList arrayList=new ArrayList();
    openDatabase();
    Cursor res=mDatabase.rawQuery("select * from title ",null);
    res.moveToFirst();
    while(!res.isAfterLast()){
        arrayList.add(res.getString(res.getColumnIndex("title")));
        res.moveToNext();
    }
    res.close();
    closeDatabbase();
    return arrayList;
}
public ArrayList getAllQuotes(){
    ArrayList arrayList=new ArrayList();
    openDatabase();
    Cursor res=mDatabase.rawQuery("select * from quote ",null);
    res.moveToFirst();
    while(!res.isAfterLast()){
        arrayList.add(res.getString(res.getColumnIndex("quote")));
        res.moveToNext();
    }
    res.close();
    closeDatabbase();
    return arrayList;
}

public String get_full_story(String title){
    String full_story;
    openDatabase();
    Cursor res =mDatabase.rawQuery("select * from title where quote like '"+getAllQuotes() +"'",null);
    res.moveToFirst();
    full_story=res.getString(res.getColumnIndex("quote"));
    res.close();
    closeDatabbase();
    return full_story;

}

}

и вот мой код в основной деятельности

public class MainActivity extends AppCompatActivity   {

DataBaseHelper db =new DataBaseHelper (this);

private DrawerLayout mDrawerLayout;
TextView textViewSub,textView3;
Typeface tf1,tf2;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     ListView listView=(ListView)findViewById(R.id.list);



    File database=getApplicationContext().getDatabasePath(db.DBNAME);
    if(false==database.exists()) {
        db.getDatabaseName();
        if (copyDatabase(this)) {

        } else {

            return;
        }
    }



    ArrayList listTitles=db.getAllTitles();
    ArrayList listTitle=db.getAllQuotes();

    ArrayAdapter arrayAdapter=new ArrayAdapter(this,R.layout.row_itm,R.id.textView3,listTitles);
    listView.setAdapter(arrayAdapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            String az=String.valueOf(parent.getItemAtPosition(position));

            Intent intent=new Intent(MainActivity.this,ShowActivity.class);

            intent.putExtra("p",az);
            startActivity(intent);
        }
    });







    mDrawerLayout = findViewById(R.id.drawer);
    NavigationView navigationView = findViewById(R.id.nav_view);

    navigationView.setNavigationItemSelectedListener(
            new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem menuItem) {


                    menuItem.setChecked(true);


                    mDrawerLayout.closeDrawers();



                    return true;
                }
            });

    mDrawerLayout.addDrawerListener(
            new DrawerLayout.DrawerListener() {
                @Override
                public void onDrawerSlide(View drawerView, float slideOffset)     {

                }

                @Override
                public void onDrawerOpened(View drawerView) {

                }

                @Override
                public void onDrawerClosed(View drawerView) {

                }

                @Override
                public void onDrawerStateChanged(int newState) {

                }
            }
    );

    textViewSub=(TextView)findViewById(R.id.textViewSub);
    textView3=(TextView)findViewById(R.id.textView3);


    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    ActionBar actionbar = getSupportActionBar();
    actionbar.setDisplayHomeAsUpEnabled(true);
    actionbar.setHomeAsUpIndicator(R.drawable.para);



    final String[] itm=getResources().getStringArray(R.array.index);

 (this,R.layout.row_itm,R.id.textView3,itm);




    tf1=Typeface.createFromAsset(getAssets(),"orangeblossoms.ttf");
    textViewSub.setTypeface(tf1);

}




private boolean copyDatabase(Context context) {
    try {
        InputStream inputStream=context.getAssets().open(db.DBNAME);
        String outFileName=db.DBLOCATION+db.DBNAME;
        OutputStream outputStream=new FileOutputStream(outFileName);
        byte[] buff=new byte[1024];
        int lenght=0;
        while ((lenght=inputStream.read(buff))>0){
            outputStream.write(buff,0,lenght);
        }
        outputStream.flush();
        outputStream.close();
        return true;

    } catch (Exception e) {
        return  false;
    }

}



@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            mDrawerLayout.openDrawer(GravityCompat.START);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

public void error(View view) {
finish();
}


public void favo(View view) {
}
}

1 Ответ

0 голосов
/ 24 октября 2018

Sir,

Для получения результата следует использовать массив String или class / object вместо только строки.

Ваш SQL-вызов возвращает курсор набора результатов вместо String.Концептуально неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...