Android 从缓存Firebase存储检索MP3文件时遇到问题

Android 从缓存Firebase存储检索MP3文件时遇到问题,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,我在收集下载的数据并将其保存到本地目录“directory”时遇到问题。然后我可以在应用程序中使用本地媒体播放器代码进行播放 我已经阅读了在线指南,并查看了android文档。我知道有办法,但没有意义。我并不是要求它是逐字逐句的,但也许一个更好的在线资源可以帮助我更好地理解文件下载后如何处理 import android.app.Activity; import android.content.Context; import android.net.Uri; import android.os.

我在收集下载的数据并将其保存到本地目录“directory”时遇到问题。然后我可以在应用程序中使用本地媒体播放器代码进行播放

我已经阅读了在线指南,并查看了android文档。我知道有办法,但没有意义。我并不是要求它是逐字逐句的,但也许一个更好的在线资源可以帮助我更好地理解文件下载后如何处理

import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FileDownloadTask;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;

import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * Created by Meglio on 3/15/17.
 */

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
    private List<Item_Sermon> itemsList;
    public File localFile = null;
    public Context context;
    public Uri localFilePath;

    private FirebaseStorage storage = FirebaseStorage.getInstance();
    private StorageReference url;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        //Create Variables
        private TextView mTimeStamp;
        private TextView mTitle;
        private ImageButton mDownloadButton;
        private ImageButton mMediaPlay;
        private ProgressBar mProgress;

        private MyViewHolder(View view) {
            super(view);
            // Setup Views and initiate them.
            mTimeStamp = (TextView)view.findViewById(R.id.item_textview_timestamp);
            mTitle = (TextView)view.findViewById(R.id.item_textview_title);
            mDownloadButton = (ImageButton)view.findViewById(R.id.item_button_download);
            mMediaPlay = (ImageButton)view.findViewById(R.id.item_button_play);
            mProgress = (ProgressBar)view.findViewById(R.id.loadingPanel);
        }
    }

    public RecyclerViewAdapter(List<Item_Sermon> itemsList) {
        this.itemsList = itemsList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.sermon_list_item, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        final Item_Sermon item = itemsList.get(position);
        //Create holders example below
        //Convert long timestamp to string
        String dateString = new SimpleDateFormat("MM/dd/yyyy h:mm a").format(new Date(item.getTimestamp()));
        holder.mTimeStamp.setText(dateString);
        holder.mTitle.setText(item.getTitle());

        //setup download button
        holder.mDownloadButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View view) {
                Log.d("Adapter", "Download Button was clicked!");
                loading(holder);
                String mFilePath = item.getFilePath();
                try {
                    localFile = File.createTempFile("audio", "mp3");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                url = storage.getReferenceFromUrl(mFilePath);
                url.getFile(localFile)
                        .addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
                            @Override
                            public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                                // Successfully downloaded data to local file
                                loadingComplete(holder);
                                Log.i("Adapter","Download Complete!");
                                Log.i("Adapter", "Gathering file..");
                               // How do I cache the files in it's own local
                               // local directory??
                               // android online guides aren't helping       
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle failed download
                        loadingFailed(holder);
                        Log.e("Adapter","Download Failed");
                    }
                });
            }
        });
        holder.mMediaPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Play the audio file with the local media player or create one.
            }
        });
        }


    private void loadingComplete(final MyViewHolder holder){
        holder.mDownloadButton.setVisibility(View.GONE);
        holder.mProgress.setVisibility(View.GONE);
    }

    private void loading(final MyViewHolder holder){
        holder.mDownloadButton.setVisibility(View.GONE);
        holder.mProgress.setVisibility(View.VISIBLE);
    }
    private void loadingFailed(final MyViewHolder holder){
        holder.mDownloadButton.setVisibility(View.VISIBLE);
        holder.mProgress.setVisibility(View.GONE);
    }


    @Override
    public int getItemCount() {
        return itemsList.size();
    }

}
导入android.app.Activity;
导入android.content.Context;
导入android.net.Uri;
导入android.os.Environment;
导入android.support.annotation.NonNull;
导入android.support.v7.widget.RecyclerView;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageButton;
导入android.widget.ProgressBar;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.google.android.gms.tasks.OnFailureListener;
导入com.google.android.gms.tasks.OnSuccessListener;
导入com.google.firebase.storage.FileDownloadTask;
导入com.google.firebase.storage.firebase存储;
导入com.google.firebase.storage.StorageReference;
导入java.io.File;
导入java.io.IOException;
导入java.net.URI;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.List;
/**
*梅格里奥于2017年3月15日创作。
*/
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
私人物品清单;
公共文件localFile=null;
公共语境;
公共Uri本地文件路径;
私有FirebaseStorage=FirebaseStorage.getInstance();
私有存储参考url;
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
//创建变量
私有文本视图mTimeStamp;
私有文本视图mTitle;
私有图像按钮mDownloadButton;
私人影像按钮播放;
私人进度律师程序;
私有MyViewHolder(视图){
超级(视图);
//设置视图并启动它们。
mTimeStamp=(TextView)view.findViewById(R.id.item\u TextView\u timestamp);
mTitle=(TextView)view.findViewById(R.id.item\u TextView\u title);
mDownloadButton=(ImageButton)view.findviewbyd(R.id.item\u button\u下载);
mmediplay=(ImageButton)view.findViewById(R.id.item\u button\u play);
mProgress=(ProgressBar)view.findViewById(R.id.loadingPanel);
}
}
公共回收服务适配器(列表项列表){
this.itemsList=itemsList;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.布道列表项,父项,false);
返回新的MyViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(最终MyViewHolder,内部位置){
最终项目\布道项目=项目列表。获取(位置);
//创建下面的示例
//将长时间戳转换为字符串
String dateString=new SimpleDateFormat(“MM/dd/yyyy h:MM a”)。格式(新日期(item.getTimestamp());
holder.mtimestap.setText(日期字符串);
holder.mTitle.setText(item.getTitle());
//安装下载按钮
holder.mDownloadButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(最终视图){
Log.d(“适配器”,“下载按钮被点击!”);
装载(支架);
字符串mFilePath=item.getFilePath();
试一试{
localFile=File.createTempFile(“音频”、“mp3”);
}捕获(IOE异常){
e、 printStackTrace();
}
url=storage.getReferenceFromUrl(mFilePath);
url.getFile(localFile)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(FileDownloadTask.TaskSnapshot TaskSnapshot){
//已成功将数据下载到本地文件
装载完成(支架);
Log.i(“适配器”,“下载完成!”);
Log.i(“适配器”、“收集文件…”);
//如何将文件缓存到它自己的本地文件中
//本地目录??
//android在线指南帮不上忙
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//句柄下载失败
加载失败(保持架);
Log.e(“适配器”,“下载失败”);
}
});
}
});
holder.mmediplay.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//使用本地媒体播放器播放或创建音频文件。
}
});
}
私有无效加载完成(最终MyViewHolder){
holder.mDownloadButton.setVisibility(View.GONE);
holder.mProgress.setVisibility(View.GONE);
}
私人无效加载(最终MyViewHolder){
holder.mDownloadButton.setVisibility(View.GONE);
holder.mProgress.setVisibility(视图可见);
}
私有无效加载失败(最终MyViewHolder持有者){
holder.mDownloadButton.setVisibility(View.VISIBLE);
holder.mProgress.setVisibility(View.GONE);
}
@凌驾
public int getItemCount(){
return itemsList.size();
}
}

您可以分享错误或其他信息吗