2013-07-02 105 views
1

所以我有一個字符串(這是一個頁面的鏈接),我需要將它傳遞給一個AsyncTask。這裏是我的代碼:傳遞字符串到AsyncTask

url = "http://www.railpnrapi.com/"; 
url = url.concat(numPNR); 
new MyTask().execute(url); 

,這裏是我的AsyncTask:

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

@Override 
protected String doInBackground(String... params) { 
String page = new Communicator().executeHttpGet(url);  
return page; 
} 

我知道我的實現是錯誤的!我如何糾正它以獲得一個有效的輸出作爲字符串?

+0

爲什麼你需要另一個類,你可以只有方法,並傳遞字符串作爲'String page = executeHttpGet(params [0])'。檢查你以前的問題 – Raghunandan

+0

@Raghunandan我剛剛在你的主要活動中定義了這個類。這是不是一個很好的面向對象操作? –

+0

在此處發佈您的代碼活動代碼。 – Raghunandan

回答

2

,你需要通過指數得到串上的異步任務如下面的代碼:

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

@Override 
protected String doInBackground(String... params) { 
String page = new Communicator().executeHttpGet(params[0]);  
return page; 
} 

你可以從的AsyncTask得到返回的字符串就像下面的代碼:

String page = new MyTask().execute(url).get(); 
+0

我只需要傳遞一個字符串,那麼定義AsyncTask 還是應該將它們更改爲void?我假設第一個參數傳遞給doInBackground函數。是這樣嗎? –

+0

第二個參數void假定onprogressupdate()方法和doinbackground()的antoher字符串返回到您的asynctask類覆蓋方法的postexecute()方法! –

+0

那麼編寫post執行方法是強制性的嗎?我如何在主活動中存儲doInbackground中返回的字符串? String page = new MyTask()。execute(url).toString();好嗎? –

1

變化:

String page = new Communicator().executeHttpGet(url);  

String page = new Communicator().executeHttpGet(params[0]);  

你也可以把字符串在構造函數中爲您的AsyncTask並將其存儲在該實例。

...之後的參數意味着它是一個可變參數,這意味着它採用該類型的多個參數並將它們放入一個數組中。你需要像你的方法中的數組那樣對待它。

1

試試這個

String page = new Communicator().executeHttpGet(params[0]); 
1

您應該像這樣更改您的代碼:

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

@Override 
protected String doInBackground(String... params) { 
String page = new Communicator().executeHttpGet(params[0]);  
return page; 
} 
1

像這樣修改你的班級。

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

String url; 

MyTask(String paramUrl) 
{ 
this.url = paramUrl; 
} 

@Override 
protected String doInBackground(String... params) { 
String page = new Communicator().executeHttpGet(url);  
return page; 
} 

並像下面一樣使用它;

new MyTask(url).execute();