Android AsyncTask: start a new activity in onPostExecute ()

the public class HttpHelper extends AsyncTask> {ArrayList List = new ArrayList ();

@Override protected ArrayList<String> doInBackground(String... urls) { // TODO Auto-generated method stub String result=""; for(String url:urls) { HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(url); try { HttpResponse response = client.execute(request); InputStream in = response.getEntity().getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line = null; StringBuffer sb = new StringBuffer(); while((line = br.readLine())!=null) { sb.append(line+"\n"); } in.close(); result = sb.toString(); String pageSource = new String(result); int startindex = pageSource.indexOf("pdf_doc/"); String str=""; String []temp; while(startindex !=-1) { int endindex = pageSource.indexOf(".pdf",startindex); str = pageSource.substring(startindex+8, endindex); String delimiter = "%20"; String value=""; temp = str.split(delimiter) ; for(int i=0;i<temp.length;i++) { value= value+temp[i]+" "; } list.add(value); startindex = pageSource.indexOf("pdf_doc/",endindex); } } catch(Exception ex) { Log.e("Error in HTML Reading",ex.getMessage()); } } return list; } @Override protected void onPostExecute(ArrayList<String> result) { // TODO Auto-generated method stub // Here i want to start new UI that use the result of AsyncTask } 

}

In this code, I read the data from the server through AsyncTask, and the result should be in the new interface. This means that I want to start a new activity from onPostExecute ().

+4
source share
3 answers

Try it,

 @Override protected void onPostExecute(Void result) { super.onPostExecute(result); Intent intent = new Intent(MyAsyncTaskActivity.this, NextActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(intent); } 
+19
source

getApplicationContext() cannot be called from AsyncTasck. Instead, you can declare a ctx variable in your constructor, which is getApplicationContext() .

 @Override protected void onPostExecute(Void result) { super.onPostExecute(result); Intent intent = new Intent(ctx.this, NextActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ctx.startActivity(intent); } 
0
source

Or you can get the context of your current activity by calling your current name, for example MyAsyncTaskActivity.this

 @Override protected void onPostExecute(Void result) { super.onPostExecute(result); Intent intent = new Intent(MyAsyncTaskActivity.this, NextActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); MyAsyncTaskActivity.this.startActivity(intent); } 
0
source

Source: https://habr.com/ru/post/1433155/


All Articles