android– 正确使用AsyncTask get()

android– 正确使用AsyncTask get(),第1张

概述我遇到了一个问题.我需要使用asynctask来检索JSON数据,在移动到程序的下一部分之前我需要这些数据.但是,当我使用AsyncTask的get()方法时,在看到数据显示之前,我有5到8秒的黑屏.我想在数据检索期间显示进度对话框,但由于黑屏,我无法执行此 *** 作.有没有办法放入另一个线程?这是一些代

我遇到了一个问题.我需要使用asynctask来检索JSON数据,在移动到程序的下一部分之前我需要这些数据.但是,当我使用AsyncTask的get()方法时,在看到数据显示之前,我有5到8秒的黑屏.我想在数据检索期间显示进度对话框,但由于黑屏,我无法执行此 *** 作.有没有办法放入另一个线程?这是一些代码

的AsyncTask

public class DataResponse extends AsyncTask<String, Integer, Data> {    AdverData delegate;    Data datas= new Data();    Reader reader;    Context myContext;    ProgressDialog dialog;    String temp1;public DataResponse(Context appcontext) {    myContext=appcontext;    }@OverrIDeprotected voID onPreExecute(){    dialog= new ProgressDialog(myContext);    dialog.setProgressstyle(ProgressDialog.STYLE_SPINNER);    dialog.setCancelable(false);    dialog.setMessage("RetrIEving...");    dialog.show(); };          @OverrIDe    protected Data doInBackground(String... params) {        temp1=params[0];                      try        {            inputStream source = retrIEveStream(temp1);            reader = new inputStreamReader(source);        }        catch (Exception e)        {            e.printstacktrace();        }            Gson gson= new Gson();            datas= gson.fromJson(reader, Data.class);                return datas;     }    @OverrIDe    protected voID onPostExecute(Data data)     {             if(dialog.isShowing())            {                dialog.dismiss();            }    }    private inputStream retrIEveStream(String url) {            DefaulthttpClIEnt clIEnt = new DefaulthttpClIEnt();             httpGet getRequest = new httpGet(url);            try {               httpResponse getResponse = clIEnt.execute(getRequest);               final int statusCode = getResponse.getStatusline().getStatusCode();               if (statusCode != httpStatus.SC_OK) {                   Log.w(getClass().getSimplename(),                       "Error " + statusCode + " for URL " + url);                   return null;               }               httpentity getResponseEntity = getResponse.getEntity();               return getResponseEntity.getContent();            }             catch (IOException e) {               getRequest.abort();               Log.w(getClass().getSimplename(), "Error for URL " + url, e);            }            return null;         }

}

displayInfo

public class displayInfo extends Activity implements AdverData {public static Data data;public ProjectedData attup;public ProjectedData attdown;public ProjectedData sprintup;public ProjectedData sprintdown;public ProjectedData verizionup;public ProjectedData veriziondown;public ProjectedData tmobileup;public ProjectedData tmobiledown;public ProjectedAll transfer;private ProgressDialog dialog;public DataResponse dataR;Intent myIntent; // gets the prevIoUsly created intentdouble x; // will return "x"double y; // will return "y"int spatial; // will return "spatial"//public static Context appContext;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    StrictMode.ThreadPolicy policy = new StrictMode.            ThreadPolicy.Builder().permitAll().build();            StrictMode.setThreadPolicy(policy);     dialog= new ProgressDialog(displayInfo.this);    dialog.setProgressstyle(ProgressDialog.STYLE_SPINNER);    dialog.setCancelable(false);    dialog.setMessage("RetrIEving...");    dialog.show();         myIntent= getIntent(); // gets the prevIoUsly created intent         x = myIntent.getDoubleExtra("x",0); // will return "x"         y = myIntent.getDoubleExtra("y", 0); // will return "y"         spatial= myIntent.getIntExtra("spatial", 0); // will return "spatial"        String URL = "Some URL"dataR=new DataResponse().execute(attUp).get();@OverrIDepublic voID onStart(){more code}

解决方法:

当您使用get时,使用Async Task没有任何意义.因为get()将阻止UI线程,这就是为什么面对3到5秒的空白屏幕,如上所述.

不要使用get()而是使用带回调的AsyncTask检查此AsyncTask with callback interface

总结

以上是内存溢出为你收集整理的android – 正确使用AsyncTask get()全部内容,希望文章能够帮你解决android – 正确使用AsyncTask get()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1103055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存