我正在使用滑动来显示专辑封面但不知何故我无法显示它.我想添加侦听器以滑动以查找错误,但它无法正常工作.它显示错误说:
Listener(com.bumptech.glIDe.request.RequestListener)
incom.bumptech.glIDe.DrawableRequestBuilder
cannot be applIEd to(anonymous com.bumptech.glIDe.request.RequestListener)
PlayListActivity.java:
package com.example.dell_1.myapp3;import androID.app.Activity;import androID.database.Cursor;import androID.media.MediaPlayer;import androID.net.Uri;import androID.os.Bundle;import androID.os.Environment;import androID.provIDer.MediaStore;import androID.support.design.Widget.Snackbar;import androID.util.Log;import androID.vIEw.VIEw;import androID.Widget.AdapterVIEw;import androID.Widget.ArrayAdapter;import androID.Widget.ImageVIEw;import androID.Widget.ListVIEw;import androID.Widget.Toast;import java.io.file;import java.io.IOException;import com.bumptech.glIDe.GlIDe;import com.bumptech.glIDe.load.resource.drawable.GlIDeDrawable;import com.bumptech.glIDe.request.RequestListener;import com.bumptech.glIDe.request.target.Target;public class PlayListActivity extends Activity { private String[] mAudioPath; private MediaPlayer mMediaPlayer; private String[] mMusicList; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_play_List); mMediaPlayer = new MediaPlayer(); ListVIEw mListVIEw = (ListVIEw) findVIEwByID(R.ID.List); mMusicList = getAudioList(); ArrayAdapter<String> mAdapter = new ArrayAdapter<>(this, androID.R.layout.simple_List_item_1, mMusicList); mListVIEw.setAdapter(mAdapter); mListVIEw.setonItemClickListener(new AdapterVIEw.OnItemClickListener() { @OverrIDe public voID onItemClick(AdapterVIEw<?> arg0, VIEw vIEw, int arg2, long arg3) { try { playSong(mAudioPath[arg2]); } catch (IllegalArgumentException e) { e.printstacktrace(); } catch (IllegalStateException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } } }); } private String[] getAudioList() { final Cursor mCursor = getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.Media.disPLAY_name, MediaStore.Audio.Media.DATA}, null, null, "LOWER(" + MediaStore.Audio.Media.Title + ") ASC"); int count = mCursor.getCount(); String[] songs = new String[count]; mAudioPath = new String[count]; int i = 0; if (mCursor.movetoFirst()) { do { songs[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.disPLAY_name)); mAudioPath[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)); i++; } while (mCursor.movetoNext()); } mCursor.close(); return songs; } private voID playSong(String path) throws IllegalArgumentException, IllegalStateException, IOException { setContentVIEw(R.layout.activity_androID_building_music_player); Log.d("ringtone", "playSong :: " + path); mMediaPlayer.reset(); mMediaPlayer.setDataSource(path);//mMediaPlayer.setLooPing(true); mMediaPlayer.prepare(); mMediaPlayer.start(); asd(); } public voID asd(){ file music = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);// Tested with music from windows 7's c:\Users\Public\Music\Sample Music String mAudioPath = new file(music, "MaID with the Flaxen Hair.mp3").getabsolutePath(); ImageVIEw imageVIEw = (ImageVIEw) findVIEwByID(R.ID.coverart); GlIDe .with(this) .load(new AudioCover(mAudioPath)) .placeholder(R.drawable.adele1) .error(R.drawable.adele1) .Listener(new RequestListener<Uri, GlIDeDrawable>() { @OverrIDe public boolean onException(Exception e, Uri model, Target<GlIDeDrawable> target, boolean isFirstResource) { return false; } @OverrIDe public boolean onResourceReady(GlIDeDrawable resource, Uri model, Target<GlIDeDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { // easy return false; // impossible? } }) .into(imageVIEw) ; }}
AudioCover.java:
package com.example.dell_1.myapp3;import androID.content.Context;import androID.media.MediaMetadataRetrIEver;import com.bumptech.glIDe.*;import com.bumptech.glIDe.load.data.DataFetcher;import com.bumptech.glIDe.load.model.GenericLoaderFactory;import com.bumptech.glIDe.load.model.ModelLoader;import com.bumptech.glIDe.load.model.ModelLoaderFactory;import com.bumptech.glIDe.load.model.stream.StreamModelLoader;import java.io.ByteArrayinputStream;import java.io.file;import java.io.fileinputStream;import java.io.fileNotFoundException;import java.io.IOException;import java.io.inputStream;public class AudioCover { final String path; public AudioCover(String path) { this.path = path; }}class AudioCoverLoader implements StreamModelLoader<AudioCover> { @OverrIDe public DataFetcher<inputStream> getResourceFetcher(AudioCover model, int wIDth, int height) { return new AudioCoverFetcher(model); } static class Factory implements ModelLoaderFactory<AudioCover, inputStream> { @OverrIDe public ModelLoader<AudioCover, inputStream> build(Context context, GenericLoaderFactory factorIEs) { return new AudioCoverLoader(); } @OverrIDe public voID teardown() { } }}class AudioCoverFetcher implements DataFetcher<inputStream> { private final AudioCover model; private fileinputStream stream; public AudioCoverFetcher(AudioCover model) { this.model = model; } @OverrIDe public String getID() { return model.path; } @OverrIDe public inputStream loadData(Priority priority) throws Exception { MediaMetadataRetrIEver retrIEver = new MediaMetadataRetrIEver(); try { retrIEver.setDataSource(model.path); byte[] picture = retrIEver.getEmbeddedPicture(); if (picture != null) { return new ByteArrayinputStream(picture); } else { return fallback(model.path); } } finally { retrIEver.release(); } } private static final String[] FALLBACKS = {"cover.jpg", "album.jpg", "folder.jpg"}; private inputStream fallback(String path) throws fileNotFoundException { file parent = new file(path).getParentfile(); for (String fallback : FALLBACKS) { // Todo make it smarter by enumerating folder contents and filtering for files // example algorithm for that: http://askubuntu.com/questions/123612/how-do-i-set-album-artwork file cover = new file(parent, fallback); if (cover.exists()) { return stream = new fileinputStream(cover); } } return null; } @OverrIDe public voID cleanup() { // already cleaned up in loadData and ByteArrayinputStream will be GC'd if (stream != null) { try { stream.close(); } catch (IOException ignore) { // can't do much about it } } } @OverrIDe public voID cancel() { // cannot cancel }}
解决方法:
RequestListener< T,R>期望T是你在load()中提供的模型,在你的情况下T =?超级AudioCover(documentation):
// ....Listener(new RequestListener<AudioCover, GlIDeDrawable>() { @OverrIDe public boolean onException(Exception e, AudioCover model, Target<GlIDeDrawable> target, boolean isFirstResource) { return false; } @OverrIDe public boolean onResourceReady(GlIDeDrawable resource, AudioCover model, Target<GlIDeDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { return false; }})// ...
注意,自版本4.0.0-RC0 RequestListener< T,R>不推荐使用RequestListener< R>,在新的javadoc中查找更多信息.
总结以上是内存溢出为你收集整理的java – 如何正确添加侦听器以滑行全部内容,希望文章能够帮你解决java – 如何正确添加侦听器以滑行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)