第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android中AsyncTask的通用類?

Android中AsyncTask的通用類?

月關(guān)寶盒 2019-12-10 13:08:24
我有一個共同的階級說的如A級延伸AsyncTask,并已實施即所有的方法onPreExecute,doinbackground和onPostExecute。現(xiàn)在,還有其他一些要使用Class A對象的類。假設(shè)B類以以下方式使用A類A a = new A(context)a.execute(url)然后我在get方法中獲取結(jié)果。但是get方法不是使用AsyncTask的正確方法。我想在中得到結(jié)果onPostExecute。為此,我嘗試使用布爾參數(shù),該參數(shù)僅在中有效onpostexecute。B類將檢查直到它變?yōu)檎?,并且在它變?yōu)檎鏁r將獲取結(jié)果。但這以某種方式阻止了應(yīng)用程序。我在下面放置了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;}有人可以讓我知道可能是什么問題嗎?
查看完整描述

3 回答

?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗 獲得超5個贊

使用AsyncTask獲得結(jié)果的一種干凈方法是使用回調(diào)接口。


這是此概念的一個簡單示例:


interface AsyncTaskCompleteListener<T> {

   public void onTaskComplete(T result);

}

然后在你的B班上:


class B implements AsyncTaskCompleteListener<String> {


    public void onTaskComplete(String result) {

        // do whatever you need

    }


    public void launchTask(String url) {

        A a = new A(context, this);

        a.execute(url);

    }

}

您現(xiàn)在應(yīng)該將以下代碼添加到您的A類中:


class A extends AsyncTask<String, Void, String> {

    private AsyncTaskCompleteListener<String> callback;


    public A(Context context, AsyncTaskCompleteListener<String> cb) {

        this.context = context;

        this.callback = cb;

    }


    protected void onPostExecute(String result) {

       finalResult = result;

       progressDialog.dismiss();

       System.out.println("on Post execute called");

       callback.onTaskComplete(result);

   }  

}

這樣,您無需顯式地等待任務(wù)完成,而是您的主代碼(可能是主UI線程)在正常的android事件循環(huán)中等待,并且onTaskComplete方法將被自動調(diào)用,允許在那里處理任務(wù)結(jié)果。



查看完整回答
反對 回復(fù) 2019-12-11
?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗 獲得超6個贊

你能再詳細(xì)點嗎?我目前正在嘗試轉(zhuǎn)換此方法:public static int invokeWebServiceRequest(String uri,String username,String password,String targetKey); 在擴(kuò)展AsyncTask的類中。我如何將那些參數(shù)(從舊方法中)傳遞給doInBackground(Params ...)?謝謝!

查看完整回答
反對 回復(fù) 2019-12-11
  • 3 回答
  • 0 關(guān)注
  • 489 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號