以下のコードを使用して、ポップアップに画像を表示しようとしています。基本的にオーディオファイルのリストがあり、それをクリックすると、そのアルバムアートを示すポップアップが表示されます(これは私が期待していることです)。しかし、アプリがクラッシュします。LogCatはNullPointerException
—を提供します—これは唯一の理由であると私は確信していImageView
ます。これが私のコードです:
public class MainActivity extends SherlockListActivity {
Uri sourceUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
@SuppressWarnings("deprecation")
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@SuppressWarnings("unused")
ActionBar ab = getSupportActionBar();
String[] from = {MediaStore.MediaColumns.TITLE,MediaStore.MediaColumns.DATA};
int[] to = {android.R.id.text1};
CursorLoader cursorLoader = new CursorLoader(this,sourceUri,null,null,null,MediaStore.Audio.Media.TITLE);
Cursor cursor = cursorLoader.loadInBackground();
startManagingCursor(cursor);
ListAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,cursor,from,to,CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Cursor cl = ((SimpleCursorAdapter)l.getAdapter()).getCursor();
cl.moveToPosition(position);
String loc = cl.getString(cl.getColumnIndex(MediaStore.MediaColumns.DATA));
File f = new File(loc);
MusicMetadataSet mmds;
try {
mmds = new MyID3().read(f);
if(mmds!=null){
MusicMetadata mmd = (MusicMetadata)mmds.getSimplified();
String s = mmd.getArtist() +"-"+mmd.getSongTitle();
Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
@SuppressWarnings("unchecked")
Vector<ImageData> img = mmd.getPictureList();
if(!img.isEmpty()){
byte[] imgData = img.get(0).imageData;
Bitmap bmp = BitmapFactory.decodeByteArray(imgData, 0, imgData.length);
LayoutInflater layoutInflater=(LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popup, null);
final PopupWindow popupWindow = new PopupWindow(popupView,100,100);
/**** PROBLEM BECAUSE OF THIS ************/
ImageView iv = (ImageView)findViewById(R.id.imageView);
iv.setImageBitmap(bmp);
popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
Button btnOk = (Button)popupView.findViewById(R.id.btnOk);
btnOk.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
popupWindow.dismiss(); //dismissing the popup
}
});
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
どうすれば解決できますか?これが私のpopup.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:orientation="vertical"
android:background="#90FFFFFF"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:text="@string/art"
android:textColor="#000000"
android:gravity="center"
android:textStyle="bold"
android:layout_height="wrap_content">
</TextView>
<ImageView
android:layout_width="fill_parent"
android:id="@+id/imageView"
android:contentDescription="@string/art"
android:layout_height="wrap_content"
/>
<Button
android:layout_width="fill_parent"
android:id="@+id/btnOk"
android:text="@string/ok"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
問題は、TextView
とがButton
うまく表示されることです。問題は奇妙なことにImageView
だけで発生します!助けてください、これは私を狂わせています。