0

外部ストレージ ボリュームに保存されている音楽を ListView に入力しようとしています。

大規模なプロジェクトからコードを分離しましたが、エラーは同じです。私の分離されたテスト プログラムでは、ボタンを押すと、ListView を埋める必要があります。エラーをスローする行をマークしました。

package com.example.crtest;

import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ListView;

public class MainActivity extends Activity {

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

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

    ListView mList;
    Cursor cu;
    ContentResolver cr;

    public void fillMeUp(View view) {
        Log.i("FillMeUp", "FMU start.");
        String[] proj = {
                MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.ARTIST,
                MediaStore.Audio.Media.ALBUM };
        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        Log.i("FillMeUp", uri.toString());

        // This is where I get an FATAL EXCEPTION
        cu = cr.query(uri, proj, MediaStore.Audio.Media.IS_MUSIC + "=1", null, null);
        Log.i("FillMeUp", "Query finished. " + (cu == null ? "Returned NULL." : "Returned a cursor."));

        Log.i("FillMeUp", "FMU with some text.");

        mList = (ListView) findViewById(R.id.lv);
        @SuppressWarnings("deprecation")
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                this,
                android.R.layout.simple_list_item_1,
                cu,
                new String[] { "bla" },
                new int[] { android.R.id.text1, android.R.id.text2 }
                );
        mList.setAdapter(adapter);
        Log.i("FillMeUp", "FMU mlist done.");
    }
}

これが LogCat が吐き出すものです。

07-19 23:07:09.613: E/Trace(30502): error opening trace file: No such file or directory (2)
07-19 23:07:09.763: D/libEGL(30502): loaded /system/lib/egl/libEGL_mali.so
07-19 23:07:09.763: D/libEGL(30502): loaded /system/lib/egl/libGLESv1_CM_mali.so
07-19 23:07:09.768: D/libEGL(30502): loaded /system/lib/egl/libGLESv2_mali.so
07-19 23:07:09.768: E/(30502): Device driver API match
07-19 23:07:09.768: E/(30502): Device driver API version: 17
07-19 23:07:09.768: E/(30502): User space API version: 17
07-19 23:07:09.773: E/(30502): mali: REVISION=Linux-r3p1-01rel1 BUILD_DATE=Mon May 13 15:55:05 KST 2013
07-19 23:07:09.803: D/OpenGLRenderer(30502): Enabling debug mode 0
07-19 23:07:12.408: I/FillMeUp(30502): FMU start.
07-19 23:07:12.408: I/FillMeUp(30502): content://media/external/audio/media
07-19 23:07:12.408: D/AndroidRuntime(30502): Shutting down VM
07-19 23:07:12.408: W/dalvikvm(30502): threadid=1: thread exiting with uncaught exception (group=0x40bcc930)
07-19 23:07:12.423: E/AndroidRuntime(30502): FATAL EXCEPTION: main
07-19 23:07:12.423: E/AndroidRuntime(30502): java.lang.IllegalStateException: Could not execute method of the activity
07-19 23:07:12.423: E/AndroidRuntime(30502):     at android.view.View$1.onClick(View.java:3606)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at android.view.View.performClick(View.java:4211)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at android.view.View$PerformClick.run(View.java:17362)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at android.os.Handler.handleCallback(Handler.java:725)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at android.os.Looper.loop(Looper.java:137)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at android.app.ActivityThread.main(ActivityThread.java:5227)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at java.lang.reflect.Method.invokeNative(Native Method)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at java.lang.reflect.Method.invoke(Method.java:511)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at dalvik.system.NativeStart.main(Native Method)
07-19 23:07:12.423: E/AndroidRuntime(30502): Caused by: java.lang.reflect.InvocationTargetException
07-19 23:07:12.423: E/AndroidRuntime(30502):     at java.lang.reflect.Method.invokeNative(Native Method)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at java.lang.reflect.Method.invoke(Method.java:511)
07-19 23:07:12.423: E/AndroidRuntime(30502):     at android.view.View$1.onClick(View.java:3601)
07-19 23:07:12.423: E/AndroidRuntime(30502):     ... 11 more
07-19 23:07:12.423: E/AndroidRuntime(30502): Caused by: java.lang.NullPointerException
07-19 23:07:12.423: E/AndroidRuntime(30502):     at com.example.crtest.MainActivity.fillMeUp(MainActivity.java:44)
07-19 23:07:12.423: E/AndroidRuntime(30502):     ... 14 more

私は Android には比較的慣れていませんが、以前に Java を使用したことがあります。私のプログラミング スキルは、さびていますが、通常は問題ありません。しかし、私はここで途方に暮れています。この問題に 2 日間取り組んできましたが、Google と Stack Overflow を使用しても何も解決しませんでした。

4

2 に答える 2

0

追加

cr = getContentResolver();

これにより、現在のコンテキストに対応する ContentResolver が返されます。

于 2014-06-06T13:39:44.780 に答える
0

また、外部ストレージに保存されているすべての音楽を取得する場合は、context.managedQuery を使用します。これを見てください: Android 外部ストレージまたはMediastore の URI からファイル名とパスを取得します

于 2013-07-19T23:07:13.970 に答える