Mon ListView
consiste en quelques musiques à côté desquelles il y a une icône à côté de chaque élément, si la musique existe sur la carte SD, l'icône est icône de lecture sinon c'est l'icône de téléchargement. Lorsque je clique sur l'icône de téléchargement, il commence à télécharger avec un ProgressBar
mais si j'appuie sur le bouton de retour pendant le téléchargement puis de nouveau sur l'activité, la barre de progression disparaît et l'icône de lecture apparaît.Restaurer l'état actif après y être retourné
Comment puis-je me mettre à jour à partir des dernières modifications lorsque je reviens à l'activité?
ActivityMusic:
ActivityMusic.myFileDownloadTask task = new ActivityMusic.myFileDownloadTask(info, mAdapter, myList);
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Mon adaptateur:
ActivityMusic.myFileDownloadTask task = new ActivityMusic.myFileDownloadTask(info, mAdapter, myList);
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
myfileDownloadTask:
public static class myFileDownloadTask extends AsyncTask<String, Integer, String> {
// private static final String TAG = FileDownloadTask.class.getSimpleName();
final DownloadInfo mInfo;
public List<DownloadInfo> myList;
private String url = "";
// public DownloadInfoArrayAdapter downloadInfoArrayAdapter;
public myFileDownloadTask(DownloadInfo info, DownloadInfoArrayAdapter mAdapter, List<DownloadInfo> updateList) {
mInfo = info;
info.setDownloading(true);
mInfo.setDownloading(true);
mInfo.setDownloadState(DownloadInfo.DownloadState.DOWNLOADING);
// downloadInfoArrayAdapter = mAdapter;
myList = updateList;
}
//
@Override
protected void onProgressUpdate(Integer... values) {
mInfo.setProgress(values[0]);
ProgressBar bar = mInfo.getProgressBar();
if (bar != null) {
ActivityMusic.loading.setVisibility(View.INVISIBLE);
bar.setProgress(mInfo.getProgress());
bar.invalidate();
}
}
@Override
protected void onPostExecute(String result) {
mInfo.setDownloadState(DownloadInfo.DownloadState.COMPLETE);
ProgressBar progressBar = mInfo.getProgressBar();
progressBar.setVisibility(View.INVISIBLE);
mInfo.setDownloading(false);
ImageView img = mInfo.getDImageView();
img.setImageResource(R.drawable.download);
mInfo.setDImaegView(img);
mInfo.getDImageView().setVisibility(View.INVISIBLE);
mInfo.setProgressBar(progressBar);
ImageView img2 = mInfo.getImageView();
img2.setImageResource(R.drawable.play);
mInfo.setPImaegView(img2);
mInfo.getImageView().setEnabled(true);
mInfo.getImageView().setVisibility(View.VISIBLE);
mInfo.getImageView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(ActivityMusic.mcontext, "Ari", Toast.LENGTH_SHORT).show();
File mfolder = new File(Environment.getExternalStorageDirectory() + "/Sh_M/" + mInfo.getFilename() + ".mp3");
DownloadInfoArrayAdapter.mUri = Uri.fromFile(mfolder);
ActivityMusic.audioWife.getInstance().release();
ActivityMusic.audioWife
.init(null, DownloadInfoArrayAdapter.mUri)
.setPlayView(ActivityMusic.mPlayMedia)
.setPauseView(ActivityMusic.mPauseMedia)
.setSeekBar(ActivityMusic.mMediaSeekBar)
.setRuntimeView(ActivityMusic.mRunTime)
.setTotalTimeView(ActivityMusic.mTotalTime).play();
ActivityMusic.relativeLayout.setVisibility(View.VISIBLE);
ActivityMusic.isPlaying = true;
}
});
// downloadInfo.add(new DownloadInfo("", 1000, ""));
// myList.add(ActivityMusic.downloadInfo.get(0));
// downloadInfoArrayAdapter = new DownloadInfoArrayAdapter(mcontext,R.id.list_view,downloadInfo);
// listView.setAdapter(downloadInfoArrayAdapter);
downloadInfoArrayAdapter.notifyDataSetChanged();
// ActivityMusic.downloadInfoArrayAdapter.notifyDataSetChanged();
}
@Override
protected void onPreExecute() {
mInfo.setDownloadState(DownloadInfo.DownloadState.DOWNLOADING);
mInfo.setDownloading(true);
}
@Override
protected String doInBackground(String... f_url) {
// mInfo.setDownloadState(DownloadInfo.DownloadState.DOWNLOADING);
int count;
try {
URL url = new URL(mInfo.getLink());
URLConnection conection = url.openConnection();
conection.connect();
// getting file length
int lenghtOfFile = conection.getContentLength();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(), 8192);
File folder = new File(Environment.getExternalStorageDirectory() + "/Sh_M");
if (!folder.exists()) {
folder.mkdir();
}
// Output stream to write file
OutputStream output = new FileOutputStream("/sdcard/Sh_M/" + mInfo.getFilename() + ".mp3");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
// After this onProgressUpdate will be called
publishProgress((int) ((total * 1000)/lenghtOfFile));
// writing data to file
output.write(data, 0, count);
}
// flushing output
output.flush();
// closing streams
output.close();
input.close();
} catch (Exception e) {
Log.e("Error: ", "");
}
return null;
}
}
IMHO vous devriez télécharger en utilisant un service et avoir juste la barre de progression en lisant un statut à partir de ce service. –
alors comment lire à partir d'un service – DavidOli
Utilisez quelque chose comme [retrofit] (http://square.github.io/retrofit/) ou, mieux encore [OkHttp] (http://square.github.io/okhttp/) –