예를 들어 AsyncTask
으로 확장되는 클래스 A에 대해 공통된 클래스가 있으며 모든 메소드가 구현되어 있습니다 (예 : onPreExecute
, doinbackground
및 onPostExecute
).Android에서 AsyncTask의 공통 클래스는 무엇입니까?
이제 클래스 A 개체를 사용하려는 다른 클래스가 있습니다.
말 클래스 B는 그때 GET 메소드의 결과를 가져 오는 방식 아래
A a = new A(context)
a.execute(url)
클래스 A를 사용한다. 그러나 get 메소드는 AsyncTask를 사용하는 적절한 방법이 아닙니다. 결과는 onPostExecute
입니다. 이를 위해 나는 onpostexecute
에서만 true가 될 부울 매개 변수를 사용해 보았습니다. 클래스 B는 그것이 참이 될 때까지 검사 할 것이고 그것이 사실이되면 결과를 가져올 것입니다.
그러나 이는 어쨌든 응용 프로그램을 차단합니다.
아래에 asynctask 코드를 넣었습니다.
'
import java.io.IOException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
public class A extends AsyncTask<String, Void, String>
{
private Context context = null;
private final HttpClient httpClient = new DefaultHttpClient();
private String content = null;
//private String error = null;
private String finalResult = null;
private static boolean isResult = false;
private ProgressDialog progressDialog = null;
public BabbleVilleSyncTask(Context context)
{
this.context = context;
progressDialog = new ProgressDialog(this.context);
}
protected void onPreExecute()
{
progressDialog.setMessage("Please Wait....");
progressDialog.show();
}
protected String doInBackground(String... urls)
{
try
{
//urls[0] = URLEncoder.encode(urls[0], "UTF-8");
HttpGet httpget = new HttpGet(urls[0]);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
content = httpClient.execute(httpget, responseHandler);
}
/*catch(UnsupportedEncodingException ue)
{
error = ue.getMessage();
}*/
catch (ClientProtocolException e)
{
//error = e.getMessage();
cancel(true);
}
catch (IOException e)
{
//error = e.getMessage();
cancel(true);
}
httpClient.getConnectionManager().shutdown();
return content;
}
protected void onPostExecute(String result)
{
finalResult = result;
progressDialog.dismiss();
System.out.println("on Post execute called");
isResult = true;
}
public boolean getIsResult()
{
return isResult;
}
public void setIsResult(boolean flag)
{
isResult = flag;
}
public String getResult()
{
return finalResult;
}
}
'
이누군가가 나에게 문제가있을 수 있습니다 알려 수 있습니까?
감사
선일이
고맙습니다. 하지만 하나의 실행 메소드에서 3 개의 URL을 호출하려면 어떻게해야합니까? 그런 다음 어떻게 응답을 가져올 수 있습니까? 모든 아이디어 – sunil
각 URL에 대해 작업에서 publishProgress를 호출하면 잘 수행해야하는 onProgressMethod 메서드가 있습니다. – SirDarius
좀 더 자세히 설명해 주시겠습니까? 현재이 메서드를 변환하려고합니다 : public static int invokeWebServiceRequest (String uri, String username, String password, String targetKey); AsyncTask를 확장하는 클래스 내부. 어떻게 내 paramaters (내 이전 메서드에서) doInBackground (Params ...) 전달할 것이라고? 감사합니다. – Cole