2013-07-02 106 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();