【发布时间】:2017-12-11 16:24:12
【问题描述】:
我有一个应用程序,其中包含 3 个或更多按顺序调用的 AsycTask。因为这些异步任务都很相似,所以我创建了一个单独的类,它可以正常工作。
现在我想添加一个进度条,以便在这些异步任务询问并处理结果时显示一些内容......但不起作用。
我的应用程序如下:
- 我打开相机并使用 ZXing 库解码 qrCode
- 使用 HttpRequest 我向我的服务器询问一些信息,我的应用程序处理这些信息
关键是在处理过程中,我的应用程序在 ZXing 库的典型取景器中显示黑屏(我想你明白我的意思)。如何用另一个带有进度条的块替换这个视图?
我已经尝试在事件 onPreExecute 和 onPostExecute 上修改进度条的可见性,我还尝试使用事件 onProgressUpdate,但没有什么是改变。取景器会一直留在屏幕上,直到 asyncTask 未完成。 按照我的代码执行 AsyncTask:
response = asynkTaskDeleteMissionQueue.execute().get();
还有我的 AsyncTask 类
package com.klainrobotics.lucalombardi.krmir;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.util.List;
import java.util.Vector;
/**
* Created by Luca Lombardi on 27/11/2017.
*/
public class MiRCall extends AsyncTask <String, Void, List<Object> >{
public AsyncResponse delegate = null;
private String url;
private String method;
private ProgressBar progress;
public MiRCall(Context v, ProgressBar prg, String...params){
method = params[0];
url = params[1];
progress = prg;
}
@Override
protected void onPreExecute(){
}
@Override
protected void onProgressUpdate(Void... v) {
super.onProgressUpdate(v);
}
@Override
protected List<Object> doInBackground(String... arg0) {
int result = -1;
publishProgress();
List<Object> response = new Vector<Object>();
String jsonResponse = "";
BufferedReader br;
try {
URL urlMissionQueue = new URL(url);
HttpURLConnection connection = (HttpURLConnection) urlMissionQueue.openConnection();
if (connection != null) {
connection.setRequestMethod(method);
connection.setRequestProperty(Costanti.headers, Costanti.StringaHeader());
connection.setRequestProperty(Costanti.contentType, Costanti.contentTypeJSon);
customBody(connection);
connection.connect();
result = connection.getResponseCode();
response.add(result);
if (200 <= result && result <= 299) {
br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
} else {
br = new BufferedReader(new InputStreamReader(connection.getErrorStream()));
}
for (String line; (line = br.readLine()) != null; jsonResponse += line);
response.add(jsonResponse);
}else {
Log.e("Url", "Connection is null");
}
} catch (Exception ex) {
Log.e("MiRCall", "doInBackgound: " + ex.toString());
}
return response;
}
@Override
protected void onPostExecute(List<Object> result) {
if (delegate != null) {
delegate.processFinish(result);
} else {
Log.e("MiRCall", "You have not assigned AsyncTask delegate");
}
}
public void customBody(HttpURLConnection connection) throws ProtocolException {
// Do nothing
}
}
提前致谢
【问题讨论】:
-
publishProgress() 是做什么的?您无法在 doInBackground() 函数中更新 ui 元素
标签: android android-asynctask zxing