Что вызывает сбой моего приложения без ошибки - PullRequest
1 голос
/ 24 апреля 2019

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

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

мой xml для отображения просмотра списка

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/mway"
    android:orientation="vertical"
    tools:context=".MainActivity">
        <TextView
            android:id="@+id/header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:background="@color/colorPrimaryDark"
            android:text="@string/app_name"
            android:textAlignment="center"
            android:textColor="@color/colorPrimary"
            android:textSize="32sp"
            android:textStyle="bold"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/list_view"
        android:background="@drawable/mway">
    </ListView>
</LinearLayout>

Вот мой java-файл для отображения просмотра списка

import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class viewceleb extends AppCompatActivity {

    DatabaseHelper db;
    ArrayList<String> listItems;
    ArrayAdapter adapter;
    ListView userList;

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

        userList = findViewById(R.id.list_view);
        listItems = new ArrayList<>();

        viewData();

        userList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
                String text = userList.getItemAtPosition(i).toString();
                Toast.makeText(viewceleb.this, "Now something can happen", Toast.LENGTH_LONG).show();
            }
        });
    }

    private void viewData() {
        Cursor cursor = db.viewData();

        if (cursor.getCount()== 0){
            Toast.makeText(this,"No Data To Show", Toast.LENGTH_LONG).show();
        }else {
            while(cursor.moveToNext()){
                listItems.add(cursor.getString(1));//index 1 is name, 0 is ID
            }

            adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listItems);
            userList.setAdapter(adapter);

        }
    }
}

1 Ответ

0 голосов
/ 24 апреля 2019

Вы только декларируете db, его нужно создать.

То есть у вас DatabaseHelper db; и вам дополнительно нужно db = new DatabaseHelper(?); где? параметры, требуемые конструктором DatabaseHelper. Как правило, просто контекст, так что, возможно, db = new DatabaseHelper(this);. Это будет закодировано в методе действия onCreate ДО , вызывающем метод viewData .

1012 *, например *

public class viewceleb extends AppCompatActivity {

    DatabaseHelper db;
    ArrayList<String> listItems;
    ArrayAdapter adapter;
    ListView userList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_viewceleb);
        dn = new DatabaseHelper(this); //<<<<<<<<<< ADDED note just the context has been assumed, the parameters depend upon the constructor as per what is coded in the DatabaseHelper class.

        userList = findViewById(R.id.list_view);
        listItems = new ArrayList<>();

        viewData();

        userList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
                String text = userList.getItemAtPosition(i).toString();
                Toast.makeText(viewceleb.this, "Now something can happen", Toast.LENGTH_LONG).show();
            }
        });
    }

    private void viewData() {
        Cursor cursor = db.viewData();

        if (cursor.getCount()== 0){
            Toast.makeText(this,"No Data To Show", Toast.LENGTH_LONG).show();
        }else {
            while(cursor.moveToNext()){
                listItems.add(cursor.getString(1));//index 1 is name, 0 is ID
            }

            adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listItems);
            userList.setAdapter(adapter);

        }
    }
}
...