Я хочу сделать просмотрщик, который показывает данные для новой активности из базы данных SQLITE - PullRequest
1 голос
/ 05 июля 2019

Я работаю над проектом, у меня есть база данных sqlite с идентификатором, заголовком, содержимым. Я хочу сделать обзор переработчика и получить заголовки из базы данных и установить для него просмотр элементов переработчика на позицию и когда пользователь нажимает на какой-либо элемент, они смогут читать контент из базы данных.Надеюсь, мой вопрос ясен!Спасибо.

Вот мой класс DatabaseHelper

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {

public static final String DBNAME = "alQais.db";

private Context context;
private SQLiteDatabase sqLiteDatabase;

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

@Override
public void onCreate(SQLiteDatabase db) {

}

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

}

public void openDatabase(){
    String dbPath = context.getDatabasePath(DBNAME).getPath();
    if(sqLiteDatabase != null && sqLiteDatabase.isOpen()){
        return;
    }
    sqLiteDatabase = SQLiteDatabase.openDatabase(dbPath, null,SQLiteDatabase.OPEN_READWRITE);
}

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

public ArrayList getAllTitles(){
    ArrayList arrayList = new ArrayList();
    openDatabase();
    Cursor cursor = sqLiteDatabase.rawQuery("select * from muallaqat", null);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()){
        arrayList.add(cursor.getString(cursor.getColumnIndex("title")));
        cursor.moveToNext();
    }
    cursor.close();
    closeDatabase();
    return arrayList;
}

public String getMuallaqa(String title){
    String muallaqat;
    openDatabase();
    Cursor cursor = sqLiteDatabase.rawQuery("select * from muallaqat where title like '" + title + "'", null);
    cursor.moveToFirst();
    muallaqat = cursor.getString(cursor.getColumnIndex("muallaqa"));
    cursor.close();
    closeDatabase();
    return muallaqat;
}}

MainActivity.java

public class MainActivity extends AppCompatActivity {

DatabaseHelper db = new DatabaseHelper(this);
ListView listView;
TextView textView;

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

    getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

    listView = findViewById(R.id.listView);

    File database = getBaseContext().getDatabasePath(db.DBNAME);
    if(false == database.exists()){
        db.getReadableDatabase();
        if(copyDatabase(this)){
            Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();
        } else{
            Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();
            return;
        }
    }

    ArrayList lstTitles = db.getAllTitles();
    ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.item_layout, lstTitles);


    listView.setAdapter(arrayAdapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String title = String.valueOf(parent.getItemAtPosition(position));
            Intent intent = new Intent(MainActivity.this, Main2Activity.class);
            intent.putExtra("title", title);
            startActivity(intent);
        }
    });

}

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

Это действие, которое показывает содержимое, полученное из sqlite

Main2Activity.java

public class Main2Activity extends AppCompatActivity {

DatabaseHelper db = new DatabaseHelper(this);

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

    Typeface face = Typeface.createFromAsset(getAssets(), "font/Amiri-Regular.ttf");

    getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

    final TextView muallaqa = findViewById(R.id.muallaqa);

    muallaqa.setMovementMethod(new ScrollingMovementMethod());
    muallaqa.setTypeface(face);

    Intent intent = getIntent();
    String title = intent.getStringExtra("title");
    String fullMuallaqa = db.getMuallaqa(title);
    muallaqa.setText(fullMuallaqa);
    this.setTitle(title);
}}

Ответы [ 3 ]

1 голос
/ 06 июля 2019

Для справки выполните шаги

1) создать методы установки и получения для идентификатора, заголовка, содержимого например

public class settter 
 {

int id;
String name;
String content;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getContent() {
    return content;
}

public void setContent(String content) {
    this.content = content;
   }
 }

2) добавьте переработчик в xml mainacctivity

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
     />

3) В MainActivity удалите весь выпущенный код списка и добавьте код, указанный ниже

 RecyclerView recyclerView=(RecyclerView)findViewById(R.id.recycler_view2);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

        //make array list object with setter class
        ArrayList<setter> name =db.getAllTitles();

       //new adapter(ArrayList<setter>, context) ,so initiate adapter
        recyclerView.setAdapter(new adapter(name,getApplicationContext()));

        //draw line 
        recyclerView.addItemDecoration(new 
     DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));

4) создать файл макета, в котором хранятся ваши данные, и раздувать его внутри.

имя: recycler_content_holder.xml

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="vertical">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:id="@+id/recycler_content_holder"
    >
    <TextView
        android:layout_width="50dp"
        android:layout_height="match_parent"
        android:gravity="center"
        android:id="@+id/tv_id"/>
    <TextView
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_marginLeft="30dp"
        android:id="@+id/tv_title"
        android:gravity="center"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="30dp"
        android:gravity="center|right"
        android:id="@+id/tv_content"/>
</LinearLayout>

5) Создать класс адаптера

public class adapter extends RecyclerView.Adapter<adapter.AdapterViewHolder>
{

ArrayList<settter> data;
Context context;
public adapter(ArrayList<settter> data,Context context)
{
    this.data=data;
    this.context=context;
}

@NonNull
@Override
public AdapterViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
{
    LayoutInflater layoutInflater=LayoutInflater.from(viewGroup.getContext());
    View view=layoutInflater.inflate(R.recycler_content_holder,viewGroup,false);
    return new ProgramingViewHolder(view);


}

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int i)
{

    viewHolder.id.setText(""+data.get(i).getId());
    viewHolder.title.setText(data.get(i).getTitle());
    viewHolder.content.setText(data.get(i).getContent());

    viewHolder.linearLayout.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {

            String title = String.valueOf(data.get(i).getTitle());
            Intent intent = new Intent(context, Main2Activity.class);
            intent.putExtra("title", title);
            startActivity(intent);

        }
    });



}

@Override
public int getItemCount() {
    return data.size();
}

//class programingViewHolder
public class AdapterViewHolder extends RecyclerView.ViewHolder
{
    TextView id,title,content;
    LinearLayout linearLayout;

    public AdapterViewHolder(@NonNull View itemView) {
        super(itemView);
        id=(TextView)itemView.findViewById(R.id.tv_id);
        title=(TextView)itemView.findViewById(R.id.tv_mtrNo);
        content=(TextView)itemView.findViewById(R.id.tv_nm);
        linearLayout=(LinearLayout)itemView.findViewById(R.id.recycler_content_holder);

    }


  }
 }

6) изменить метод в DatabaseHelper

public ArrayList<setter> getAllTitles(){
    ArrayList<setter> arrayList = new ArrayList();
    openDatabase();
    setter set=new setter();
    Cursor cursor = sqLiteDatabase.rawQuery("select * from muallaqat", null);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()){
        set.setTitle(cursor.getString(cursor.getColumnIndex("title")));
        //add object to arralist
        arrayList.add(set);
        cursor.moveToNext();
    }
    cursor.close();
    closeDatabase();
    return arrayList;
}

Просто скопируйте, вставьте и поймите, надеюсь, это вам поможет.

0 голосов
/ 05 июля 2019

Просто сделай одну вещь Это взять идентификатор и заголовок из базы данных и показать заголовок в переработке. И когда onItemНажмите на просмотрщик, передайте идентификатор позиции в горизонтальной плоскости для следующего действия.

И в следующем действии извлекают идентификатор, который передается из предыдущего действия.

И получать данные из данных с идентификатором. Вы получите все данные.

И показать извлеченные данные для активности.

0 голосов
/ 05 июля 2019

Если я правильно понимаю, вы хотите использовать обзор повторов с данными из базы данных SQLite? и вы хотите открыть новое действие, когда вы нажимаете на элемент и заполняете его данными из элемента? Проверьте эту статью

Реализация RecyclerView с адаптером курсора

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