我全都陷入AsyncTask,与params相混淆,进展,结果我应该放。在我的应用程序中,我需要显示图像 在画廊里。网址包含所有图片。我通过JSON获取这些图像URL并将响应保存在arraylist中并将其传递给新的 活动。但是,我能够在名为“image_urls”的arraylist中保存JSON响应。作为我刚接触到的android,我很困惑params应该是什么 在背景和asynctask中提供。提前谢谢。
以下是我创建的单独类,在doInBackground中,我使用JSON获取所需的项目。我很困惑所有参数应放在AsyncTask和doInBackground中
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) {
}
}
答案 0 :(得分:1)
试试这个,
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();
}
}
答案 1 :(得分:1)
如果您在http://developer.android.com/reference/android/os/AsyncTask.html上看到他们已经很好地解释了AsyncTask。
但是,如果你没有得到它,让我试一试:
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, Progress, Result>.
Params
- 输入。您传递给AsyncTask的内容(它可以是从哪里下载文件的URL)
Progress
- 如果您有任何更新,则传递给onProgressUpdate()(如果您想在UI上显示下载过程的进度,则使用此参数)
Result
- 输出。什么将doInBackground()返回给onPostExecute()