Tôi có một hoạt động trong đó trình xem ảnh hiển thị danh sách chứa các nghệ sĩ từ trung tâm, mà onitem nhấp vào hiển thị danh sách album nghệ sĩ được chọn, lần lượt hiển thị các bài hát trong album đó. Khi một bài hát được nhấp vào, nó sẽ điền một textview với chuỗi 'title'.Lỗi con trỏ trên Android - "đảm bảo con trỏ được khởi chạy chính xác trước khi truy cập dữ liệu từ nó ..."
Cho đến thời điểm này, tất cả các con trỏ đều hoạt động tốt, nhưng cái cuối cùng dường như bị loại bỏ khỏi vị trí nào đó. Bất cứ ai có thể cho tôi biết lý do tại sao logcat nói với tôi:
05-07 23:58:54.195: E/AndroidRuntime(1961): java.lang.IllegalStateException: Couldn't read row 3, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
Hàng cụ thể không thể đọc khác nhau tùy thuộc vào ca sĩ/album/bài hát được chọn. Mã như sau. Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn.
package music.flipper;
import android.app.Activity;
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.provider.MediaStore.MediaColumns;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.ViewFlipper;
public class MusicFlipper extends Activity implements OnItemClickListener {
/** Called when the activity is first created. */
ViewFlipper viewflipper;
Cursor cursor;
private String currentList = "Artist";
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.flipper);
//set the main view to flipper.
viewflipper = (ViewFlipper) findViewById(R.id.viewFlipper1);
String[] columns = {
BaseColumns._ID,
ArtistColumns.ARTIST
};
//The columns to return for each row.
cursor = managedQuery(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
columns, null, null, null);
ListView listView = (ListView) findViewById(R.id.listView1);
listView.setOnItemClickListener(this);
//set an onitemclicklistener to the first listview in flipper
String[] displayFields = new String[] { ArtistColumns.ARTIST };
//set all the artist names to the array 'displayfields'
int[] displayViews = new int[] { R.id.rowItem };
//number of rows to display and where to bind them
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.row_item, cursor, displayFields, displayViews);
listView.setAdapter(adapter); }
//Take the display fields array, and bind to the matching display row
@SuppressWarnings("deprecation")
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
if(currentList.equals("Artist")) {
if (cursor.moveToPosition(position)) {
//once an item is clicked, move the cursor to that items position
String where = AudioColumns.ARTIST + "=?";
// Have the cursor look within the artist row?
String whereVal[] = { cursor.getString(cursor
.getColumnIndex(AlbumColumns.ARTIST)) };
//Choose the particular row with the chosen artist's name
String[] columns = {
BaseColumns._ID,
AudioColumns.ALBUM,
};
String orderBy = BaseColumns._ID;
cursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
columns, where, whereVal, orderBy);
ListView listView = (ListView) findViewById(R.id.listView2);
listView.setOnItemClickListener(this);
String[] displayFields = new String[] { AudioColumns.ALBUM };
int[] displayViews = new int[] { R.id.rowItem };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.row_item, cursor, displayFields, displayViews);
listView.setAdapter(adapter);
currentList = "Album";
viewflipper.showNext();}
} if (currentList.equals("Album")) {
if (cursor.moveToPosition(position)) {
String where = AudioColumns.ALBUM
+ "=?";
String whereVal[] = { cursor.getString(cursor
.getColumnIndex(AlbumColumns.ALBUM)) };
String[] columns = {
MediaColumns.DATA,
BaseColumns._ID,
MediaColumns.TITLE,
MediaColumns.DISPLAY_NAME,
MediaColumns.MIME_TYPE,
};
String orderBy = MediaColumns.TITLE;
cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
columns, where, whereVal, orderBy);
ListView listView = (ListView) findViewById(R.id.listView3);
listView.setOnItemClickListener(this);
String[] displayFields = new String[] { MediaColumns.TITLE };
int[] displayViews = new int[] { R.id.rowItem };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.row_item, cursor, displayFields, displayViews);
listView.setAdapter(adapter);
currentList.equals("Songs");
viewflipper.showNext();}
} if (currentList.equals("Songs")) {
if (cursor.moveToPosition(position)) {
String title = cursor.getString(cursor.getColumnIndex(MediaColumns.TITLE));
TextView myTextView = (TextView) findViewById(R.id.title);
myTextView.setText(title);
}
}
}
}
Hey timusus, nếu câu trả lời của tôi sẽ giúp bạn ra/vào giải quyết vấn đề, vui lòng nhấp vào dấu kiểm bên cạnh nó để tôi nhận được tín dụng và mọi người khác biết rằng vấn đề của bạn đã được giải quyết. Chúc may mắn! – Barak
Barak, bạn có thể vui lòng xem các bình luận dưới đây, tôi muốn có thêm một chút thông tin về cách đạt được kết quả mong muốn .. –
mã ... kinh dị – slinden77