2013-07-02 2 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() и строку antoher из doinbackground(), возвращаемого в метод postexecute(), в методах переопределения класса asynctask! –

+0

. Обязательно ли писать метод выполнения сообщения? Как сохранить возвращаемую строку из doInbackground в основном действии? String page = new MyTask(). Execute (url) .toString(); все в порядке? –

1

Изменение:

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

в

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

Вы также можете взять строку в в конструкторе для вашего AsyncTask и сохранить его в экземпляре.

... после параметра означает, что это vararg, что означает, что он принимает несколько параметров этого типа и помещает их в массив для вас. Вам нужно рассматривать его как массив в вашем методе.

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(); 
Смежные вопросы