Android Studio中我想把SD卡中的音乐文件的信息读取到数据库中,但是一直失败

代码如下

package com.example.androidkscj.Util;

import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;

import androidx.annotation.Nullable;

import com.example.androidkscj.Bean.User;
import com.example.androidkscj.Dynamic_duo.MusicContract;

public class DatebaseHelper extends SQLiteOpenHelper {
    public static final String databaseName = "kcsj1.db";
    public static final String TABLE_NAME = "users";
    public static final String COL_ADMIN = "admin";
    public static final String COL_PASSWORD = "password";
    public static final String COL_ID = "id";
    public static final String COL_EMAIL = "email";
    public static final String COL_PHONE = "phone";

    private static final int DATABASE_VERSION = 1;

    public DatebaseHelper(@Nullable Context context) {
        super(context, "kcsj1.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase MyDatabase){
         MyDatabase.execSQL("create Table users(admin TEXT primary key,id TEXT,password TEXT,email TEXT,phone TEXT)");
         MyDatabase.execSQL(SQL_CREATE_MUSIC_TABLE);

            String SQL_CREATE_MUSIC_TABLE = "CREATE TABLE " + MusicContract.MusicEntry.TABLE_NAME + " ("
                    + MusicContract.MusicEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + MusicContract.MusicEntry.COLUMN_TITLE + " TEXT NOT NULL, "
                    + MusicContract.MusicEntry.COLUMN_ARTIST + " TEXT NOT NULL, "
                    + MusicContract.MusicEntry.COLUMN_ALBUM + " TEXT NOT NULL, "
                    + MusicContract.MusicEntry.COLUMN_DURATION + " INTEGER NOT NULL, "
                    + MusicContract.MusicEntry.COLUMN_PATH + " TEXT NOT NULL, "
                    + MusicContract.MusicEntry.COLUMN_MIME_TYPE + " TEXT NOT NULL, "
                    + MusicContract.MusicEntry.COLUMN_SIZE + " INTEGER NOT NULL);";
        MyDatabase.execSQL(SQL_CREATE_MUSIC_TABLE);


    }

    @Override
    public void onUpgrade(SQLiteDatabase MyDatabase,int i,int i1){
        MyDatabase.execSQL("drop Table if exists users");
        MyDatabase.execSQL("DROP TABLE IF EXISTS " + MusicContract.MusicEntry.TABLE_NAME);
    }

    private static final String SQL_CREATE_MUSIC_TABLE =
            "CREATE TABLE " + MusicTable.TABLE_NAME + " (" +
                    MusicTable._ID + " INTEGER PRIMARY KEY," +
                    MusicTable.TITLE + " TEXT," +
                    MusicTable.ARTIST + " TEXT," +
                    MusicTable.DURATION + " INTEGER," +
                    MusicTable.PATH + " TEXT)";

    public static class MusicTable implements BaseColumns {
        public static final String TABLE_NAME = "music";
        public static final String TITLE = "title";
        public static final String ARTIST = "artist";
        public static final String DURATION = "duration";
        public static final String PATH = "path";
    }

    public Boolean insertData(String admin, String password, String id, String email, String phone) {
        SQLiteDatabase MyDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_ADMIN, admin);
        contentValues.put(COL_PASSWORD, password);
        contentValues.put(COL_ID, id);
        contentValues.put(COL_EMAIL, email);
        contentValues.put(COL_PHONE, phone);

        boolean success = false;
        try {
            long result = MyDatabase.insert(TABLE_NAME, null, contentValues);
            if (result != -1) {
                success = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyDatabase.close();
        }

        return success;
    }
    public boolean checkAdmin(String admin) {
        SQLiteDatabase MyDatabase = this.getWritableDatabase();
        Cursor cursor = null;
        try {
            cursor = MyDatabase.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + COL_ADMIN + " = ?", new String[]{admin});
            return cursor.getCount() == 0;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (cursor != null) {
                cursor.close();
            }
            MyDatabase.close();
        }
    }

    public boolean checkAdminPassword(String admin, String password) {
        SQLiteDatabase MyDatabase = this.getWritableDatabase();
        Cursor cursor = null;
        try {
            cursor = MyDatabase.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + COL_ADMIN + " = ? AND " + COL_PASSWORD + " = ?", new String[]{admin, password});
            return cursor.getCount() > 0;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (cursor != null) {
                cursor.close();
            }
            MyDatabase.close();
        }
    }


    public User getAdminByID(String admin) {
        User user = null;
        SQLiteDatabase MyDatabase = this.getReadableDatabase();
        Cursor cursor = null;
        cursor = MyDatabase.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + COL_ADMIN + " = ? ", new String[]{admin});

        if (cursor.moveToFirst()) {
            @SuppressLint("Range") String password = cursor.getString(cursor.getColumnIndex(COL_PASSWORD));
            @SuppressLint("Range") String id = cursor.getString(cursor.getColumnIndex(COL_ID));
            @SuppressLint("Range") String email = cursor.getString(cursor.getColumnIndex(COL_EMAIL));
            @SuppressLint("Range") String phone = cursor.getString(cursor.getColumnIndex(COL_PHONE));
            user = new User(admin, password, id, email,phone);
        }

        cursor.close();
        MyDatabase.close();
        return user;
    }



    }



package com.example.androidkscj.Dynamic_duo;

import android.provider.BaseColumns;

public final class MusicContract {
    private MusicContract() {}

    public static class MusicEntry implements BaseColumns {
        public static final String TABLE_NAME = "Music";
        public static final String COLUMN_TITLE = "title";
        public static final String COLUMN_ARTIST = "artist";
        public static final String COLUMN_ALBUM = "album";
        public static final String COLUMN_DURATION = "duration";
        public static final String COLUMN_PATH = "path";
        public static final String COLUMN_MIME_TYPE = "mime_type";
        public static final String COLUMN_SIZE = "size";
    }
}



package com.example.androidkscj.TX;

import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.provider.MediaStore;

import com.example.androidkscj.Bean.Music;

import java.util.ArrayList;
import java.util.List;

public class MusicLoader {
    private static final String[] PROJECTION = {
            MediaStore.Audio.Media._ID,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.DATA,
            MediaStore.Audio.Media.MIME_TYPE,
            MediaStore.Audio.Media.SIZE
    };

    public static List<Music> loadMusic(Context context) {
        Cursor cursor = context.getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                PROJECTION,
                null,
                null,
                null
        );

        List<Music> musicList = new ArrayList<>();
        if (cursor != null) {
            while (cursor.moveToNext()) {
                @SuppressLint("Range") long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
                @SuppressLint("Range") String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
                @SuppressLint("Range") String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                @SuppressLint("Range") String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                @SuppressLint("Range") long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
                @SuppressLint("Range") String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                @SuppressLint("Range") String mimeType = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.MIME_TYPE));
                @SuppressLint("Range") long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));

                Music music = new Music(id, title, artist, album, duration, path, mimeType, size);
                musicList.add(music);
            }

            cursor.close();
        }

        return musicList;
    }
}
package com.example.androidkscj.Activity;

import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

import com.example.androidkscj.Bean.Music;
import com.example.androidkscj.Dynamic_duo.MusicContract;
import com.example.androidkscj.R;
import com.example.androidkscj.TX.MusicLoader;
import com.example.androidkscj.Util.DatebaseHelper;

import java.util.List;

public class Text extends AppCompatActivity {
    private DatebaseHelper mDbHelper;

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

        mDbHelper = new DatebaseHelper(this);

        // 从SD卡中读取音乐文件,并插入到数据库中
        new Thread(new Runnable() {
            @Override
            public void run() {
                List<Music> musicList = MusicLoader.loadMusic(Text.this);
                SQLiteDatabase db = mDbHelper.getWritableDatabase();
                for (Music music : musicList) {
                    ContentValues values = new ContentValues();
                    values.put(MusicContract.MusicEntry.COLUMN_TITLE, music.mTitle);
                    values.put(MusicContract.MusicEntry.COLUMN_ARTIST, music.mArtist);
                    values.put(MusicContract.MusicEntry.COLUMN_ALBUM, music.mAlbum);
                    values.put(MusicContract.MusicEntry.COLUMN_DURATION, music.mDuration);
                    values.put(MusicContract.MusicEntry.COLUMN_PATH, music.mPath);
                    values.put(MusicContract.MusicEntry.COLUMN_MIME_TYPE, music.mMimeType);
                    values.put(MusicContract.MusicEntry.COLUMN_SIZE, music.mSize);
                    db.insert(MusicContract.MusicEntry.TABLE_NAME, null, values);
                }
                db.close();
            }
        }).start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        mDbHelper.close();
    }
}

有什么报错吗,把异常信息发出来看下。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632