我遇到了一个问题.我需要使用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()所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)