Используйте let
:
Prelude> :{
Prelude| let addTwo :: Int -> Int -> Int
Prelude| addTwo x y = x + y
Prelude| :}
Prelude> addTwo 2 3
5
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
public class AsyncExample extends Activity{
private String url="http://www.google.co.in";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
new AsyncCaller().execute();
}
private class AsyncCaller extends AsyncTask<Void, Void, Void>
{
ProgressDialog pdLoading = new ProgressDialog(AsyncExample.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
pdLoading.setMessage("\tLoading...");
pdLoading.show();
}
@Override
protected Void doInBackground(Void... params) {
//this method will be running on background thread so don't update UI frome here
//do your long running http tasks here,you dont want to pass argument and u can access the parent class' variable url over here
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//this method will be running on UI thread
pdLoading.dismiss();
}
}
}
Согласно AsyncTask , его
AsyncTask<Params, Progress, Result>
Итак, если вы хотите передать пустоту в doInBackground просто передайте пустоту вместо Params.
Пример кода:
class DownloadLink extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
//Do Your stuff here..
return null;
}
}
И назовите его как:
new DownloadLink().execute();
Почему вы не хотите передавать какие-либо аргументы? Вы должны объяснить ...
Как это обычно работает (пример):
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
И для его выполнения вы вызываете:
new DownloadFilesTask().execute(url1, url2, url3);
Источник: Android docs
doInBakground
. этот метод открывает только PHP-файл на моем веб-сервере методом POST. И мне нужно только получить ответ от этого php-файла. Поэтому мне не нужно передавать какие-либо аргументы в doInBackground
.
– omerjerk
10 January 2013 в 07:00
Void
. Таким образом, вы бы private class DownloadFilesTask extends AsyncTask<Void, Integer, Long> {
.
– Oleg Vaskevich
10 January 2013 в 07:20
Создайте свой AsyncTask
класс, как если бы вы не хотели передавать какой-либо параметр в doInBackground
:
public class LongOperation extends AsyncTask<Void, Void, String> {
public LongOperation(Context context) {
}
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(String result) {
}
}
и запускать AsyncTask, не передавая ни один параметр для выполнения:
LongOperation longOperation = new LongOperation(this);
longOperation.execute();
doInBackground
действительно должен быть третьим аргументом класса («String» в показанном примере).
– Fattie
3 December 2016 в 18:29