순차적으로 호출되는 3 개 이상의 AsycTask가있는 응용 프로그램이 있습니다. 이러한 asyntasks는 모두 비슷하기 때문에 분리 된 클래스를 만들고 제대로 작동합니다.진행 막대가있는 AsyncTask
이제 asynctasks가 결과를 묻고 처리 할 때 뭔가를 표시하기 위해 진행 표시 줄을 추가하고 싶습니다.하지만 작동하지 않습니다. 다음과 같은
내 응용 프로그램 작업 :
- 내 카메라를 열고 ZXing 라이브러리와 나는 QRCODE
- 사용 HttpRequest를 내 서버에 몇 가지 정보를 요청을 디코딩하고 내 응용 프로그램이 정보를 처리
요점은 처리하는 동안 내 응용 프로그램이 ZXing 라이브러리의 팁 뷰 파인더가있는 검은 색 화면을 표시한다는 것입니다. (제 말의 의미를 이해한다고 생각합니다). 이 뷰를 진행 막대가있는 다른 블록으로 대체하는 방법은 무엇입니까?
이미 또한 내가 이벤트 onProgressUpdate를 사용하려고 onPreExecute 및 onPostExecute 이벤트에서, 수정 된 진행률 표시 줄 가시성했지만, nothig은 변화이다. 뷰 파인더는 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 요소를 업데이트 할 수 없습니다. –