Итак, я получаю ошибку nullpointerexception в SQLDatabase.java (показано в конце этого сообщения) на нашей базе данных в 216. MusicCenter.java - это действие, и он должен искать ArrayList и вставлять исполнителя, песню название и его тексты в базу данных (будет использоваться позже), но вместо этого он вылетает, и логарифм говорит:наша база данных равна нулю?
По-прежнему нуждается в помощи. Пожалуйста, кто-то
http://i.imgur.com/nWuEzth.png
Song.java:
package com.musicplayer;
import android.os.StrictMode;
import com.lyricscloud.SQLDatabase;
import com.lyricscloud.Websites;
public class Song {
public Song(long songID, String songTitle, String songArtist) {
id=songID;
title=songTitle;
artist=songArtist;
generateLyricsFunc(artist,title);
if(Lyrics!=null && !Lyrics.equals("")) {
SQLDatabase db = new SQLDatabase(MusicCenter.c);
db.createEntry(artist, title, Lyrics, "Songs");--Error here
db.close();
}
}
public long getID(){return id;}
public String getTitle(){return title;}
public String getLyrics(){return Lyrics;}
public String getArtist(){return artist;}
}
MusicCenter.java:
getSongList();
for(int i=0; i<songsAmnt;i++) {
SQLDatabase db = new SQLDatabase(this);
db.open();
db.createEntry(songList.get(i).getArtist(),songList.get(i).getTitle(),songList.get(i).getLyrics(),"Song");
db.close();
}
getSongList метод:
public static void getSongList() {
ContentResolver musicResolver = c.getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
if (musicCursor != null && musicCursor.moveToFirst()) {
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
if(!thisArtist.equals("<unknown>") && !thisArtist.equals("Facebook")) {
Log.d(CompName,"Id:" + thisId + " Title:" + thisTitle + " Artist: " + thisArtist);
songList.add(new Song(thisId, thisTitle, thisArtist)); //error here
songsAmnt =+ 1;
}
}
while (musicCursor.moveToNext());
musicCursor.close();
}
}
SQLDatabase .java:
package com.lyricscloud;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
public class SQLDatabase {
public static final String SONGKEY_ROWID = "_id";
public static final String SONGKEY_ARTISTNAME = "artist_name";
public static final String SONGKEY_SONGNAME = "song_name";
public static final String SONGKEY_LYRICS = "lyrics";
public static final String[] SONGALL_KEYS = new String[]{SONGKEY_ROWID, SONGKEY_ARTISTNAME, SONGKEY_SONGNAME, SONGKEY_LYRICS};
private static final String DATABASE_NAME = "LyricsCloudDB";
private static final String DATABASE_TABLE = "BookmarkTable";
private static final String bookMarksTable = "CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_ARTISTNAME + " TEXT NOT NULL, " +
KEY_SONGNAME + " TEXT NOT NULL," +
KEY_LYRICS + " TEXT NOT NULL);";
private static final int DATABASE_VERSION = 3;
private static SQLDatabase instance = null;
private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
private static final String DATABASE_TABLE_SONGS = "SongsTable";
private static final String songsTable = "CREATE TABLE " + DATABASE_TABLE_SONGS + " (" +
SONGKEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
SONGKEY_ARTISTNAME + " TEXT NOT NULL, " +
SONGKEY_SONGNAME + " TEXT NOT NULL," +
SONGKEY_LYRICS + " TEXT NOT NULL);";
private static class DbHelper extends SQLiteOpenHelper {
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(songsTable);
db.execSQL(bookMarksTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE);
db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE_SONGS);
onCreate(db);
}
}
public SQLDatabase(Context c) {
ourContext = c;
}
boolean isTableExists(SQLiteDatabase db, String tableName)
{
if (tableName == null || db == null || !db.isOpen())
{
return false;
}
Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?", new String[] {"table", tableName});
if (!cursor.moveToFirst())
{
return false;
}
int count = cursor.getInt(0);
cursor.close();
return count > 0;
}
public long createEntry(String artistname, String songname, String lyrics, String which) {
if(which.equals("Bookmark")) {
ContentValues cv = new ContentValues();
cv.put(KEY_ARTISTNAME, artistname);
cv.put(KEY_SONGNAME, songname);
cv.put(KEY_LYRICS, lyrics);
return ourDatabase.insert(DATABASE_TABLE, null, cv);
}else{
try {
ContentValues cv = new ContentValues();
cv.put(KEY_ARTISTNAME, artistname);
cv.put(KEY_SONGNAME, songname);
if(lyrics!=null && !lyrics.equals("")) {
cv.put(KEY_LYRICS, lyrics);
Log.d("DataBaseShit","Lyrics is not null");
}
if(isTableExists(ourDatabase,songsTable)){
Log.d("DataBaseShit","Test");
}else{
Log.d("DataBaseShit","Table not created");
ourDatabase.execSQL(DATABASE_TABLE_SONGS); --Get's an error here
if(isTableExists(ourDatabase,songsTable)){
Log.d("DataBaseShit","Test");
}else{
Log.d("DataBaseShit","Table not credated");
}
}
//Log.d("DataBaseShit", "Artist: " + artistname + " Song:" + songname + " Lyrics:" + lyrics);
return ourDatabase.insert(DATABASE_TABLE_SONGS, null, cv); --if I remove ourDatabase.execSQL line above then the error moves to this line.
}catch(NullPointerException e){
e.printStackTrace();
}
}
return 0;
}
}
Это поможет, если вы могли бы включать в себя номера строк, или по крайней мере указать на место ошибка указывает на. Это также поможет включить код для «ourDatabase», если вы не ссылаетесь на SQLDatabase.java. Если вы также можете обрезать любой ненужный код из сообщения, это поможет другим также ответить на ваш вопрос. – Jonathan
Джонатан, я имею в виду SQLDatabase.java, и я сожалею о избыточном количестве кода, который я опубликовал в прошлом, и люди жаловались, что они хотели бы видеть полный код, я отредактировал свой вопрос и достал какой-то код, но я боюсь многого вынести, потому что я не уверен, что понадобится и не понадобится. Я даже не знаю, как этот вывод журнала вышел даже. Я также отметил, где он дает ошибки в Song.java, SQLDatabase.java и MusicCenter.java – Mitch