如何在Android应用程序中使用AsyncTask
我被AsyncTask困住了,对参数、进度和结果感到困惑。在我的应用程序中,我需要显示图像 在画廊里。url由所有图像组成。我通过JSON获取这些图像URL,并将响应保存在arraylist中,然后将其传递给新的 活动。但是,我能够将JSON响应保存在名为“image_url”的arraylist中。由于我是android新手,我不知道params应该是什么 在后台和异步任务中提供。提前谢谢 下面是我在doInBackground中创建的一个单独的类,我使用JSON获取重新需要的项目如何在Android应用程序中使用AsyncTask,android,json,android-asynctask,Android,Json,Android Asynctask,我被AsyncTask困住了,对参数、进度和结果感到困惑。在我的应用程序中,我需要显示图像 在画廊里。url由所有图像组成。我通过JSON获取这些图像URL,并将响应保存在arraylist中,然后将其传递给新的 活动。但是,我能够将JSON响应保存在名为“image_url”的arraylist中。由于我是android新手,我不知道params应该是什么 在后台和异步任务中提供。提前谢谢 下面是我在doInBackground中创建的一个单独的类,我使用JSON获取重新需要的项目 publi
public abstract class Images1 extends AsyncTask<Void, Integer, Void>{
private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR;
private static String url = "http://www.ttt.com/album_pro/array_to_encode";
ArrayList<String> urlList = new ArrayList<String>();
JSONParser jParser = new JSONParser();
ArrayList<String> image_urls = new ArrayList<String>();
protected ArrayList<String> doInBackground(Void... params) {
JSONObject json = jParser.getJSONFromUrl(url);
try{
JSONObject seo = json.getJSONObject("SEO");
JSONArray folio = seo.getJSONArray("Folio");
JSONArray image_urls1 = new JSONArray();
String s1=seo.getString("Folio");
for(int i=0;i<folio.length();++i)
{
String m = folio.getString(i);
Log.v("M"+i,m);
image_urls.add(m+ ",");
}
}
catch(Exception e)
{
e.printStackTrace();
}
return image_urls;
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(String[] result) {
}
}
公共抽象类Images1扩展了异步任务{
私有静态易失性执行器sDefaultExecutor=串行执行器;
专用静态字符串url=”http://www.ttt.com/album_pro/array_to_encode";
ArrayList urlList=新的ArrayList();
JSONParser jParser=新的JSONParser();
ArrayList image_url=新的ArrayList();
受保护的ArrayList doInBackground(无效…参数){
JSONObject json=jParser.getJSONFromUrl(url);
试一试{
JSONObject seo=json.getJSONObject(“seo”);
JSONArray folio=seo.getJSONArray(“folio”);
JSONArray image_urls1=新的JSONArray();
字符串s1=seo.getString(“Folio”);
对于(int i=0;i试试这个
public class GetTask extends AsyncTask<Void, Void, Integer> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
mPreogressDialog = ProgressDialog.show(Mainactivity.this,
"Loading", "Please wait");
}
@Override
protected Integer doInBackground(Void... params) {
// TODO Auto-generated method stub
//Do your stuff here call ur methods
imagedownload();
return 0;
}
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
// TODO Auto-generated method stub
if (mPreogressDialog.isShowing())
mPreogressDialog.dismiss();
}
}
public vlid imagedownload(){
JSONObject json = jParser.getJSONFromUrl(url);
try{
JSONObject seo = json.getJSONObject("SEO");
JSONArray folio = seo.getJSONArray("Folio");
JSONArray image_urls1 = new JSONArray();
String s1=seo.getString("Folio");
for(int i=0;i<folio.length();++i)
{
String m = folio.getString(i);
Log.v("M"+i,m);
image_urls.add(m+ ",");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
公共类GetTask扩展异步任务{
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
MPREogresDialog=ProgressDialog.show(Mainactivity.this,
“正在装货”,“请稍候”);
}
@凌驾
受保护的整数doInBackground(Void…params){
//TODO自动生成的方法存根
//你这里的东西叫你的方法吗
imagedownload();
返回0;
}
受保护的void onPostExecute(整数结果){
super.onPostExecute(结果);
//TODO自动生成的方法存根
if(mpreogresdialog.isShowing())
mpreogresdialog.disclose();
}
}
公共vlid图像下载(){
JSONObject json=jParser.getJSONFromUrl(url);
试一试{
JSONObject seo=json.getJSONObject(“seo”);
JSONArray folio=seo.getJSONArray(“folio”);
JSONArray image_urls1=新的JSONArray();
字符串s1=seo.getString(“Folio”);
对于(inti=0;i,如果您看到,他们已经很好地解释了异步任务
但如果你不明白,让我试试:
Android通过一个线程修改用户界面,即所谓的UI线程。如果您直接在UI线程上执行长时间运行的操作,例如从internet下载文件,则应用程序的用户界面将“冻结”,直到相应的任务完成
AsyncTask允许正确、轻松地使用UI线程。此类允许在UI线程上执行后台操作和发布结果,而无需操作线程和/或处理程序
为了使用AsyncTask类,必须对其进行扩展并至少重写doInBackground()方法
您需要实施的最常见方法如下:
onPreExecute()
–在UI线程开始运行之前调用。此方法通常用于设置任务,例如通过显示进度条
doInBackground(Params…
–这是在后台线程上运行的方法。在此方法中,您应该将希望应用程序执行的所有代码放在后台。完成后,它会将结果发送到onPostExecute()
onProgressUpdate()
-在doInBackground()中调用publishProgress()时调用
onPostExecute(Result)
–后台线程完成后在UI线程上调用。它将从doInBackground()接收的结果作为参数
AsyncTask
是一个泛型类,它使用3种类型:AsyncTask。
Params
–输入。您传递给AsyncTask的内容(可以是下载文件的URL)
进度
–如果您有任何更新,请传递给onProgressUpdate()(如果您希望在UI上显示下载过程的进度,则使用此参数)
Result
–输出。返回doInBackground()到onPostExecute()的内容参考示例了解AsyncTask的泛型类型