我有一个具有3个或更多AsycTask的应用程序,它们被顺序调用。因为这些asyntasks都是相似的,所以我创建了一个独立的类,它可以正常工作。
现在我想添加一个进度条,以便在这些asynctasks询问并处理结果时显示某些内容......但不起作用。
我的申请工作如下:
重点是在处理过程中我的应用程序显示了一个带有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
}
}
提前致谢
答案 0 :(得分:0)
response = asynkTaskDeleteMissionQueue.execute().get();
使用.get()函数非常糟糕。取消get()。只开始任务。
asynkTaskDeleteMissionQueue.execute();
然后在onPostExecute()处理响应。
答案 1 :(得分:0)
感谢您的建议。我执行
response = asynkTaskDeleteMissionQueue.execute().get();
因为我的asyncTask返回一个对象列表,所以我不知道另一种方式......
关于原始问题?有什么建议吗?
非常感谢您的时间