Android ExceptionIninitializerError

时间:2012-06-06 10:17:23

标签: android

我在以下代码行中收到“ExceptionInitializerError”:

(活动1)

Activity2.selection = AudioColumns.ARTIST + "=?";

(活动2)

static String selection;

有人可以告诉我我做错了吗?

有关完整代码,请参阅下文。

(活动1)

package awesome.music.player;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.provider.MediaStore;
import android.provider.MediaStore.Audio.AlbumColumns;
import android.provider.MediaStore.Audio.ArtistColumns;
import android.provider.MediaStore.Audio.AudioColumns;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class ArtistsActivity extends Activity implements OnItemClickListener {

    private Cursor artistCursor;

    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.artistsview);

        String[] artistColumns = { BaseColumns._ID, ArtistColumns.ARTIST };
        // The columns to return for each row.

        artistCursor = managedQuery(
                MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, artistColumns,
                null, null, null);

        ListView listView = (ListView) findViewById(R.id.listViewArtists);
        listView.setOnItemClickListener(this);
        // set an on item click listener to the first list view in this activity

        String[] displayFields = new String[] { ArtistColumns.ARTIST };
        // set all the artist names to the array "displayfields"
        int[] displayViews = new int[] { R.id.artistTitle };
        // number of rows to display and where to bind them

        SimpleCursorAdapter artistAdapter = new SimpleCursorAdapter(this,
                R.layout.artistitem, artistCursor, displayFields, displayViews);
        listView.setAdapter(artistAdapter);
    }

    // Take the display fields array, and bind to the matching display row

    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
        if (artistCursor.moveToPosition(position)) {

            Playlist.selection = AudioColumns.ARTIST + "=?";

            Playlist.selectionArgs = new String[] { artistCursor
                    .getString(artistCursor.getColumnIndex(AlbumColumns.ARTIST)) };

            Playlist.artist = artistCursor.getString(artistCursor
                    .getColumnIndex(ArtistColumns.ARTIST));

            Intent intent = new Intent(ArtistsActivity.this,
                    ArtistAlbumsActivity.class);

            startActivity(intent);

        }
    }

}

(活动2)

package awesome.music.player;

import java.util.ArrayList;

import android.content.ContentUris;
import android.net.Uri;

public class Playlist {

    static ArrayList<String> pathList = new ArrayList<String>();
    static ArrayList<String> artistList = new ArrayList<String>();
    static ArrayList<String> albumList = new ArrayList<String>();
    static ArrayList<String> titleList = new ArrayList<String>();
    static ArrayList<String> idList = new ArrayList<String>();
    static ArrayList<String> durationList = new ArrayList<String>();

    static int currentSongIndex;
    static String currentSongPath;
    static String artist;
    static String album;
    static String albumId;
    static String numSongs;
    static String selection;
    static String[] selectionArgs;
    static String totalSongduration; // Set

    static String songDuration = durationList.get(currentSongIndex);

    static String currentAlbumId = Playlist.idList
            .get(Playlist.currentSongIndex);

    static Integer currentAlbumIdLong = Integer.parseInt(currentAlbumId);

    static Uri artworkUri = Uri
            .parse("content://media/external/audio/albumart");

    static Uri currentSongUri = ContentUris.withAppendedId(artworkUri,
            currentAlbumIdLong);;

    static int totalSongDuration = Integer.parseInt(songDuration);

}

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

抛出ExceptionInInitializerError以指示在评估静态初始值设定项或静态变量的初始值设定项期间发生了异常。检查你的代码是否有任何静态初始化逻辑。

答案 1 :(得分:0)

不要使用Static这是一个坏习惯,而是使用“静态”使对象成为类并使用它。

public class Playlist {

    ArrayList<String> pathList = new ArrayList<String>();
....
...
}

实施。

public class ArtistsActivity extends Activity implements OnItemClickListener {

    private Playlist mPlaylist;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.artistsview);
        mPlaylist= new Playlist();
     }
}

答案 2 :(得分:0)

检查Playlist处的静态初始化,例如初始化Integer.parseInt(currentAlbumId); currentAlbumId的{​​{1}}值{。}}。