- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经查看过有关此问题的所有类似线程,但找不到解决我的问题的方法
我的 AsynkTask 应该从保管箱下载文件并在通知进度条中显示进度。 doInBackground 下载文件,但方法 publishProgress/onProgressUpdate 无法正常工作。 onProgressUpdate 未被调用。
异步任务
public class SongDownload extends AsyncTask<String, String, String> {
DropboxAPI<AndroidAuthSession> dDBApi;
Context context;
Dropbox db;
SharedPreferences prefs;
NotificationManager mNotifyManager;
Notification notification;
String datei;
public SongDownload(Context context, Dropbox db) {
this.db = db;
this.context = context;
Log.v("mp3dropboxsync", "SongDownload");
mNotifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.ic_launcher, "Neuer DropBox Song!", System.currentTimeMillis());
RemoteViews views = new RemoteViews(context.getApplicationContext()
.getPackageName(), R.layout.notiprogressbar);
views.setProgressBar(R.id.progressBar1, 100, 0, false);
views.setTextViewText(R.id.status_text, "Song Downloading...");
notification.contentView = views;
notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONGOING_EVENT;
mNotifyManager.notify(10, notification);
}
@Override
protected String doInBackground(String... dropboxFile) {
Log.v("mp3dropboxsync", "DoinBackground");
File file = new File(Environment.getExternalStorageDirectory().getPath()+"/MP3/sonstiges/"+dropboxFile[0]);
datei = dropboxFile[0];
BufferedOutputStream out=null;
try {
if(!file.exists())
{
out = new BufferedOutputStream(new FileOutputStream(file));
db.mDBApi.getFile("/MP3/"+dropboxFile[0], null, out, new ProgressListener() {
@Override
public void onProgress(long bytes, long total) {
try {
Log.v("mp3dropboxsync", "onProgress");
String s = ""+(bytes/(float)total)*100;
publishProgress(s);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.v("mp3dropboxsync", "onProgressERROR");
}
}
});
}
} catch (DropboxException e) {
Log.v("mp3dropboxsync", "Something went wrong while downloading.");
file.delete();
} catch (FileNotFoundException e) {
Log.v("mp3dropboxsync", "File not found.");
} catch (Exception e) {
Log.v("mp3dropboxsync", "Unbekannter Fehler: "+e.getMessage());
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
dropboxFile[0] = "";
}
return dropboxFile[0];
}
@Override
protected void onProgressUpdate(String... progress) {
super.onProgressUpdate(progress);
try {
int percent = Integer.parseInt(progress[0]);
Log.v("mp3dropboxsync","Hi progressing - " + percent + "%");
notification.contentView.setProgressBar(R.id.progressBar1, 100, percent, false);
notification.contentView.setTextViewText(R.id.status_text, "Downloading... "+datei);
mNotifyManager.notify(10, notification);
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.v("mp3dropboxsync","OnPostExecute");
mNotifyManager.cancel(10);
}
}
日志
08-07 15:14:54.716: I/System.out(29125): waiting for debugger to settle...
08-07 15:14:54.926: I/System.out(29125): debugger has settled (1366)
08-07 15:14:55.496: D/libEGL(29125): loaded /system/lib/egl/libGLES_android.so
08-07 15:14:55.527: D/libEGL(29125): loaded /system/lib/egl/libEGL_adreno200.so
08-07 15:14:55.557: D/libEGL(29125): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
08-07 15:14:55.567: D/libEGL(29125): loaded /system/lib/egl/libGLESv2_adreno200.so
08-07 15:14:55.577: V/mp3dropboxsync(29125): OnStartCommand
08-07 15:14:55.577: V/mp3dropboxsync(29125): In Auth
08-07 15:14:55.577: V/mp3dropboxsync(29125): Nach Auth - linked: true
08-07 15:14:55.577: V/mp3dropboxsync(29125): Dropbox GetListe
08-07 15:14:55.677: I/Adreno200-EGLSUB(29125): <ConfigWindowMatch:2078>: Format RGBA_8888.
08-07 15:14:55.717: D/memalloc(29125): ashmem: Mapped buffer base:0x5266b000 size:1536000 fd:63
08-07 15:14:55.727: D/OpenGLRenderer(29125): Enabling debug mode 0
08-07 15:14:55.967: I/global(29125): In close() at SocketHttpClientConnection
08-07 15:14:55.987: D/memalloc(29125): ashmem: Mapped buffer base:0x52e0c000 size:1536000 fd:67
08-07 15:15:03.464: V/mp3dropboxsync(29125): SongDownload
08-07 15:15:03.484: V/mp3dropboxsync(29125): DoinBackground
08-07 15:15:03.624: I/global(29125): In close() at SocketHttpClientConnection
08-07 15:15:06.517: V/mp3dropboxsync(29125): onProgress
08-07 15:15:07.108: V/mp3dropboxsync(29125): onProgress
08-07 15:15:07.628: V/mp3dropboxsync(29125): onProgress
08-07 15:15:08.149: V/mp3dropboxsync(29125): onProgress
08-07 15:15:08.659: V/mp3dropboxsync(29125): onProgress
08-07 15:15:09.200: V/mp3dropboxsync(29125): onProgress
08-07 15:15:09.740: V/mp3dropboxsync(29125): onProgress
08-07 15:15:10.261: V/mp3dropboxsync(29125): onProgress
08-07 15:15:10.801: V/mp3dropboxsync(29125): onProgress
08-07 15:15:11.402: V/mp3dropboxsync(29125): onProgress
08-07 15:15:11.943: V/mp3dropboxsync(29125): onProgress
08-07 15:15:12.463: V/mp3dropboxsync(29125): onProgress
08-07 15:15:12.974: V/mp3dropboxsync(29125): onProgress
08-07 15:15:13.494: V/mp3dropboxsync(29125): onProgress
08-07 15:15:14.005: V/mp3dropboxsync(29125): onProgress
08-07 15:15:14.585: V/mp3dropboxsync(29125): onProgress
08-07 15:15:15.146: V/mp3dropboxsync(29125): onProgress
08-07 15:15:15.696: V/mp3dropboxsync(29125): onProgress
08-07 15:15:16.247: V/mp3dropboxsync(29125): onProgress
08-07 15:15:16.847: V/mp3dropboxsync(29125): onProgress
08-07 15:15:17.398: V/mp3dropboxsync(29125): onProgress
08-07 15:15:17.928: V/mp3dropboxsync(29125): onProgress
08-07 15:15:18.439: V/mp3dropboxsync(29125): onProgress
08-07 15:15:19.009: V/mp3dropboxsync(29125): onProgress
08-07 15:15:19.550: V/mp3dropboxsync(29125): onProgress
08-07 15:15:20.090: V/mp3dropboxsync(29125): onProgress
08-07 15:15:20.621: V/mp3dropboxsync(29125): onProgress
08-07 15:15:21.242: V/mp3dropboxsync(29125): onProgress
08-07 15:15:21.742: V/mp3dropboxsync(29125): onProgress
08-07 15:15:22.283: V/mp3dropboxsync(29125): onProgress
08-07 15:15:22.793: V/mp3dropboxsync(29125): onProgress
08-07 15:15:23.304: V/mp3dropboxsync(29125): onProgress
08-07 15:15:23.954: V/mp3dropboxsync(29125): onProgress
08-07 15:15:24.545: V/mp3dropboxsync(29125): onProgress
08-07 15:15:25.075: V/mp3dropboxsync(29125): onProgress
08-07 15:15:25.606: V/mp3dropboxsync(29125): onProgress
08-07 15:15:25.936: I/global(29125): In close() at SocketHttpClientConnection
08-07 15:15:25.936: I/global(29125): call socket close in SocketHttpClientConnection, socket=SSL socket over Socket[address=/199.47.219.158,port=443,localPort=36480]
08-07 15:15:25.976: I/global(29125): I/O error closing connection
08-07 15:15:25.976: I/global(29125): java.net.SocketException: Socket is closed
08-07 15:15:25.976: I/global(29125): at java.net.Socket.checkOpenAndCreate(Socket.java:671)
08-07 15:15:25.976: I/global(29125): at java.net.Socket.getSoLinger(Socket.java:434)
08-07 15:15:25.976: I/global(29125): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImplWrapper.getSoLinger(OpenSSLSocketImplWrapper.java:156)
08-07 15:15:25.976: I/global(29125): at org.apache.http.impl.conn.tsccm.AbstractConnPool.closeConnection(AbstractConnPool.java:327)
08-07 15:15:25.976: I/global(29125): at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.deleteEntry(ConnPoolByRoute.java:530)
08-07 15:15:25.976: I/global(29125): at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.deleteClosedConnections(ConnPoolByRoute.java:653)
08-07 15:15:25.976: I/global(29125): at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.closeExpiredConnections(ThreadSafeClientConnManager.java:301)
08-07 15:15:25.976: I/global(29125): at com.dropbox.client2.session.AbstractSession$IdleConnectionCloserThread.run(AbstractSession.java:530)
08-07 15:15:25.996: W/IdleConnectionHandler(29125): Removing a connection that never existed!
08-07 15:15:26.116: V/mp3dropboxsync(29125): onProgress
08-07 15:15:26.687: V/mp3dropboxsync(29125): onProgress
08-07 15:15:27.197: V/mp3dropboxsync(29125): onProgress
08-07 15:15:27.758: V/mp3dropboxsync(29125): onProgress
08-07 15:15:28.258: V/mp3dropboxsync(29125): onProgress
08-07 15:15:29.019: V/mp3dropboxsync(29125): onProgress
08-07 15:15:29.430: V/mp3dropboxsync(29125): SongDownload
08-07 15:15:29.700: V/mp3dropboxsync(29125): DoinBackground
08-07 15:15:32.272: V/mp3dropboxsync(29125): onProgress
08-07 15:15:32.773: V/mp3dropboxsync(29125): onProgress
08-07 15:15:33.283: V/mp3dropboxsync(29125): onProgress
08-07 15:15:33.784: V/mp3dropboxsync(29125): onProgress
08-07 15:15:34.304: V/mp3dropboxsync(29125): onProgress
08-07 15:15:34.835: V/mp3dropboxsync(29125): onProgress
08-07 15:15:35.345: V/mp3dropboxsync(29125): onProgress
08-07 15:15:35.866: V/mp3dropboxsync(29125): onProgress
08-07 15:15:36.466: V/mp3dropboxsync(29125): onProgress
08-07 15:15:36.967: V/mp3dropboxsync(29125): onProgress
08-07 15:15:37.487: V/mp3dropboxsync(29125): onProgress
08-07 15:15:38.068: V/mp3dropboxsync(29125): onProgress
08-07 15:15:38.569: V/mp3dropboxsync(29125): onProgress
08-07 15:15:39.079: V/mp3dropboxsync(29125): onProgress
08-07 15:15:39.580: V/mp3dropboxsync(29125): onProgress
08-07 15:15:40.150: V/mp3dropboxsync(29125): onProgress
08-07 15:15:40.751: V/mp3dropboxsync(29125): onProgress
08-07 15:15:41.311: V/mp3dropboxsync(29125): onProgress
08-07 15:15:41.822: V/mp3dropboxsync(29125): onProgress
08-07 15:15:42.402: V/mp3dropboxsync(29125): onProgress
08-07 15:15:42.903: V/mp3dropboxsync(29125): onProgress
08-07 15:15:43.453: V/mp3dropboxsync(29125): onProgress
08-07 15:15:43.954: V/mp3dropboxsync(29125): onProgress
08-07 15:15:44.464: V/mp3dropboxsync(29125): onProgress
08-07 15:15:44.985: V/mp3dropboxsync(29125): onProgress
08-07 15:15:45.485: V/mp3dropboxsync(29125): onProgress
08-07 15:15:45.996: V/mp3dropboxsync(29125): onProgress
08-07 15:15:46.496: V/mp3dropboxsync(29125): onProgress
08-07 15:15:47.007: V/mp3dropboxsync(29125): onProgress
08-07 15:15:47.567: V/mp3dropboxsync(29125): onProgress
08-07 15:15:48.258: V/mp3dropboxsync(29125): onProgress
08-07 15:15:48.839: V/mp3dropboxsync(29125): onProgress
08-07 15:15:49.439: V/mp3dropboxsync(29125): onProgress
08-07 15:15:49.990: V/mp3dropboxsync(29125): onProgress
08-07 15:15:50.210: V/mp3dropboxsync(29125): SongDownload
08-07 15:15:50.240: V/mp3dropboxsync(29125): DoinBackground //file already exist
我什么都试过了。还有一些其他效果,例如在 DoinBackground 完成后多次调用 onProgressUpdate。但目前它没有被调用。我也无法解释套接字关闭异常。 =/
希望你能帮助我。我已经尝试重新制作整个项目并重新安装。但它没有用。
谢谢!
最佳答案
请尝试使用我的 POC,它对你有帮助。
公共(public)类 MainActivity 扩展 Activity { 处理器 handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new BackGroundTask().execute("");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
class BackGroundTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
publishProgress("" + i);
}
}
});
t.start();
return null;
}
@Override
protected void onProgressUpdate(String... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("T:" + values[0]);
}
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
关于android - AsyncTask publishProgress 不要调用 onProgressUpdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104534/
我今天在我的 Android 项目中遇到了一个涉及 aSyncTasks 的问题,经过一些研究找到了答案,并且与我交谈过的人都没有意识到,所以我想我会与 SO 社区分享,以防万一有人发现它有任何用处。
我目前正在 AsyncTask 的 onPostExecute 方法中执行类似的操作,其中 NewTask 不是当前正在执行的任务: private class OlderTask extends A
所以,我正在研究一个条形码解码器,一旦我们有了条形码,它就会通过互联网进入多个 API 来解码刚刚扫描的内容。问题是我必须将一些 XML 解析链接在一起,我不知道我做的是否正确。 因此,扫描条形码后,
我的团队开发了一个新的 Android 应用程序,它广泛使用了 Room。 我不确定我们是否正确使用 AsyncTask。 我们不得不在 AsyncTasks 中包装所有对 insert/update
我查看了其他问题,但未能澄清我对从另一个任务调用任务的疑问,我有以下代码: protected List doInBackground(String... params) try {
我正在开发一个访问 Web 服务的应用程序,并使用从中获取的 JSON 创建一个对象并在我的代码中使用它。尽管我的应用程序正在运行,但我不知道它是否写得很好且完美无缺。 我将解释我的内容,然后放置一些
虽然我还没有尝试过,但从理论上讲,我问这个问题只是为了消除我的疑虑。 我有这样一个场景:1. 向服务器发送请求并接收 JSON 响应。为此,我正在使用 AsyncTask,因为接收响应可能会有延迟。2
我有以下 AsyncTask 的实现,允许多个 AsyncTask 同时运行: public abstract class MyAsyncTask extends AsyncTask { pu
花了很多时间试图解决这个问题,我已经阅读了很多问题、论坛、答案......但它仍然不会更新 UI。 我的最终目标是从用户那里获取一个搜索词,并将一个 httprequest 发送到用 JSON 回复的
我有一个异步任务 private class LoadData extends AsyncTask { private String WEBURL; LoadData(String u
我正在用 android 做一些编码工作。我几乎遇到了一个问题,为了解决这个问题,我需要一个匿名 AsyncTask 类来执行。但我还需要在执行之前传递并反对这个类。我尝试了下面的代码,但它不起作用,
我有两个 AsyncTask:第一个寻找素数,如果成功,我必须调用第二个 AsyncTask 显示单词“Yop!” (将这个词添加到数组列表中,并显示在AsyncTask三)。 如果我从 onProg
我想使用 AsyncTask 将图像加载到 ListView。 private class LoadImageTask extends AsyncTask,Void,Bitmap>{ @Sup
在我的 AsyncTask 的某个时刻,在完成一些验证之后,我需要派生另一个线程来做一些其他工作。所以我现在想要两个后台线程,每个都做自己的事情(每个执行大约 2-3 秒)。我们的想法是最大限度地提高
(这与空指针无关):我在 AsyncTask 中有一个进度条,并且添加了一个取消按钮来取消 asynctask。 我可以从异步任务外部取消异步任务,但我需要在异步任务下实现的progressdialo
我有一个 Activity ,在启动时调用“json”来获取歌曲的数据类别,之后我调用方法“AsyncTask”来获取来自另一个“JSON”的歌曲列表问题是,当我启动 Activity 时,它被锁定,
我想做以下事情。我想显示一个包含信息和图像的列表。这些图像需要一段时间才能加载,所以我想我会采取不同的方式。我会使用两个 AsyncTasks。第一个创建所有布局并用除图像之外的数据填充它。第二个只是
如果我做了这样的事情: public class MyFragment extends Fragment { private GetDataTask mGDT; //onCreat
在 Android Activity 中,我在 onCreate 方法中执行 AsyncTask。我应该在 AsyncTask 的 onPostExecute 中还是在 OnCreate 方法中声明
我对 AsyncTask 有疑问我尝试为 10 个 Json 文件向互联网打开 10 个请求,因此我读取它并将其保存到用户设备_由于数据差异,此文件必须分开,包括。 那么,将每个请求放在单个 Asyn
我是一名优秀的程序员,十分优秀!