0

Приложение на android работает с базой данных sqlite Мне нужно реализовать возможность добавления/удаления материал. Что сделано на данный момент. game_view(отвечает за вывод информации из бд)

package com.example.glavnaya;

import android.content.ContentValues;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.method.ScrollingMovementMethod;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.glavnaya.utils.DatabaseHelper;
import com.example.glavnaya.utils.FavoriteHelper;
import com.example.glavnaya.utils.ItemStory;

public class game_view extends AppCompatActivity {

    TextView txtName, txtDate, txtView;
    WebView webView;
    Toolbar toolbar;
    ScrollView mScrollView;
    ProgressBar mProgressBar;
    ItemStory objBean;
    String Id;
    LinearLayout mAdViewLayout;
    Menu menu;
    DatabaseHelper DatabaseHelper;
    FavoriteHelper FavoriteHelper;
    boolean isFromNotification = false;
    ImageView ImgStory;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game_view);
        Toolbar toolbar = findViewById(R.id.toolbar);


        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        toolbar.setTitle("Просмотр материала");
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();// возврат на предыдущий activity

            }
        });


        String title=getIntent().getStringExtra("title");
        String text=getIntent().getStringExtra("text");

        TextView wordText= (TextView) findViewById(R.id.wordtext);
        TextView definitionText= (TextView) findViewById(R.id.definitiontext);

        wordText.setText(title);
        definitionText.setText(text);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case android.R.id.home:
                onBackPressed();
                break;
            case R.id.favorite:
                ContentValues fav = new ContentValues();
                if (FavoriteHelper.getFavouriteById(Id)) {
                    FavoriteHelper.removeFavouriteById(Id);
                    menu.getItem(0).setIcon(R.drawable.favorite);
                    Toast.makeText(game_view.this, getString(R.string.favourite_remove), Toast.LENGTH_SHORT).show();
                } else {
                    fav.put(FavoriteHelper.KEY_ID, Id);
                    fav.put(FavoriteHelper.KEY_TITLE, objBean.getStoryTitle());
                    fav.put(FavoriteHelper.KEY_TEXT,objBean.getStoryText());
                    fav.put(FavoriteHelper.KEY_FAVORITE,objBean.getStoryFavorite());
                    FavoriteHelper.addFavourite(FavoriteHelper.TABLE_FAVOURITE_NAME, fav, null);
                    menu.getItem(0).setIcon(R.drawable.favorite_i);
                    Toast.makeText(game_view.this, getString(R.string.favourite_add), Toast.LENGTH_SHORT).show();
                }
                break;
        }
        return true;
    }

    private void isFavourite() {
        if (FavoriteHelper.getFavouriteById(Id)) {
            menu.getItem(0).setIcon(R.drawable.favorite);
        } else {
            menu.getItem(0).setIcon(R.drawable.favorite_i);
        }
    }

    @Override
    public void onBackPressed() {
        if (isFromNotification) {
            Intent intent = new Intent(game_view.this, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            finish();
        } else {
            super.onBackPressed();
        }

    }
}

Отвечает за базу данных favorite.sqlite и хранению закладок, чтобы при обновлении основной базы данных она не вылетала.

package com.example.glavnaya.utils;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;

public class FavoriteHelper extends SQLiteOpenHelper {

    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "favorite.sqlite";
    public static final String TABLE_FAVOURITE_NAME = "danetki";

    public static final String KEY_ID = "id";
    public static final String KEY_TITLE = "title";
    public static final String KEY_TEXT = "text";
    public static final String KEY_FAVORITE = "favorite";
    public FavoriteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String CREATE_FAVOURITE_TABLE = "CREATE TABLE " + TABLE_FAVOURITE_NAME + "("
                + KEY_ID + " INTEGER,"
                + KEY_TITLE + " TEXT,"
                + KEY_TEXT + " TEXT,"
                + KEY_FAVORITE + "FAVORITE"
                + ")";
        db.execSQL(CREATE_FAVOURITE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_FAVOURITE_NAME);
        // Create tables again
        onCreate(db);
    }

    public boolean getFavouriteById(String story_id) {
        boolean count = false;
        SQLiteDatabase db = this.getWritableDatabase();
        String[] args = new String[]{story_id};
        Cursor cursor = db.rawQuery("SELECT id FROM favourite WHERE id=? ", args);
        if (cursor.moveToFirst()) {
            count = true;
        }
        cursor.close();
        db.close();
        return count;
    }

    public void removeFavouriteById(String _id) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.execSQL("DELETE FROM  favourite " + " WHERE " + KEY_ID + " = " + _id);
        db.close();
    }

    public long addFavourite(String TableName, ContentValues contentvalues, String s1) {
        SQLiteDatabase db = this.getWritableDatabase();
        return db.insert(TableName, s1, contentvalues);
    }

    public ArrayList<ItemStory> getFavourite() {
        ArrayList<ItemStory> chapterList = new ArrayList<>();
        String selectQuery = "SELECT *  FROM "
                + TABLE_FAVOURITE_NAME;
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                ItemStory contact = new ItemStory();
                contact.setId(cursor.getString(cursor.getColumnIndexOrThrow(KEY_ID)));
                contact.setStoryTitle(cursor.getString(cursor.getColumnIndexOrThrow(KEY_TITLE)));
                contact.setStoryText(cursor.getString(cursor.getColumnIndexOrThrow(KEY_TEXT)));
                contact.setStoryFavorite(cursor.getString(cursor.getColumnIndexOrThrow(KEY_FAVORITE)));
                chapterList.add(contact);
            } while (cursor.moveToNext());
        }
        cursor.close();
        db.close();
        return chapterList;
    }
}

Сам лог вылета:

1573925327.481 3993-3993/com.spravochnik.glavnaya E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.spravochnik.glavnaya, PID: 3993
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.glavnaya.utils.FavoriteHelper.getFavouriteById(java.lang.String)' on a null object reference
        at com.example.glavnaya.game_view.isFavourite(game_view.java:112)

Жалуется на отстутствие значения..но у меня даже желтых предупреждении нет.

Я обратил внимание, что если взять кусок кода

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

и заменить на

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_story, menu);
    this.menu = menu;
    isFavourite();
    return true;
}

То вылетает уже при заходе на саму страницу game_view

В чем тогда может быть вылет?

Boglik
  • 43
  • 1
    В двух словах - Ваш представленный кусок кода не дедает ничего. Что вам делать дальше - почитать немного литературы про андроид, java и базы данных. На ютубе полно примеров которые вам нужны – Романыч Nov 14 '19 at 17:41
  • https://ru.stackoverflow.com/a/559151/177345 – pavlofff Nov 14 '19 at 22:51
  • Вот на ютубе есть темы такие как: создать базу данных, вывести базу данных. Есть статьи на эту тему. Есть темы как создать собственный адаптер и тд.

    Но именно по моей теме, нет ни одного конкретного урока или статьи. В этом то и проблема, что я не могу уловить сути от которой можно отталкиваться. Вот и прошу, пример исходного кода или статью на английском/русском/индийском с пояснениями.

    – Boglik Nov 15 '19 at 08:23
  • вот по моей ссылке выше написано, как можно организовать избранное, этого не достаточно для улавливания сути? – pavlofff Nov 15 '19 at 23:01
  • вот еще пример с рабочим кодом – pavlofff Nov 16 '19 at 12:49
  • Спасибо, я обновил информацию в шапке, сейчас просто вылетает страница при загрузке данных если вставлять isFavorite() – Boglik Nov 16 '19 at 18:48

0 Answers0