2012-09-08 98 views
4

public class HttpHelper extends AsyncTask> { ArrayList list = new ArrayList();Android AsyncTask:开始新活动onPostExecute()

@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 
} 

}

在该代码中,我通过的AsyncTask从服务器读取数据和结果应当是在新的装置UI.That我想要开始onPostExecute新活动()。

+1

得到你当前活动的背景和究竟是你的问题?你有什么尝试?你得到什么错误? –

回答

18

试试这个,

@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); 
} 
+0

你需要更多upvotes。 :D – Sheharyar

+3

'getApplicationContext()'在AsyncTask中不可用。至少如果你把它放到一个没有从'Context'继承的类中 – High6

0

getApplicationContext()不能从AsyncTasck调用。相反,你可以在构造函数中声明一个变量ctx,它是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

或者,你可以通过调用当前的名字,像这样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); 
}