2011-08-04 26 views
0

我正在嘗試編寫一段代碼,它需要一個URL並將其文本內容顯示到EditText視圖。這不順利,我身邊,我認爲答曰如使從這裏描述的的AsyncTask我的網絡電話等環節粉碎:從URL中將txt文件讀取到Android Honeycomb上的EditText中,獲取NetworkOnMainThreadException

Android Honeycomb: Fragment not able to start AsyncTask?

,但似乎並沒有工作。這實際上是一個函數(稱爲另一個函數),這就是我正在嘗試使用的所有函數。這些功能都貼的完整性:

public static InputStream getInputStreamFromUrl(String url){ 
      InputStream contentStream = null; 

      try{ 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpResponse response = httpclient.execute(new HttpGet(url)); 
       contentStream = response.getEntity().getContent(); 
      } catch(Exception e){ 
       e.printStackTrace(); 
      } 
      return contentStream; 
     } 

    public static String getStringFromUrl(String url) { 
     BufferedReader br = new BufferedReader(new InputStreamReader(getInputStreamFromUrl(url))); 

     StringBuffer sb = new StringBuffer(); 

     try{ 
      String line = null; 

      while ((line = br.readLine())!=null){ 
      sb.append(line); 
      } 
     }catch (IOException e){ 
      e.printStackTrace(); 
     } 
     return sb.toString(); 
    } 

而這些從打電話給我:

 retrieveURLReferenceBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View arg0) { 
       new FragmentHttpHelper().execute(); 
     } 
    }); 

所以通過將:按鈕提取網址被點擊時執行

private class FragmentHttpHelper extends AsyncTask<Void, Void, Boolean>{ 
     protected void onPostExecute(Boolean result) { 
        contractTextTxt.setText(getStringFromUrl(urlReferenceTxt.getText().toString())); 
      } 
     @Override 
     protected Boolean doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
      return true; 
     }   
    } 

在asynctask中的東西我以爲我打算繞過蜂窩3.0 NetworkOnMainThreadException但它似乎不是。任何想法接下來要嘗試什麼?

回答

1

看起來你並沒有把你的實際網絡調用放在AsyncTask的doInBackground方法中。這通常是你想要做的,然後onPostExecute將被調用。我認爲你啓動AsyncTask後,你的onPostExecute就會被調用,因爲你在doInBackground中沒有做任何事情。

嘗試將您的HttpClient代碼移入doInBackground方法。

從我可以告訴它的運行是這樣的:

按鈕點擊>通話的AsyncTask>沒有在後臺線程偏偏>調用postExecute它試圖.setText(網絡呼叫)......這是回到你的UI線。

糾正我,如果我錯了。也許我看到這個錯誤?

+0

這樣做,現在我只需要弄清楚如何使用換行符將所返回的字符串渲染到Android''EditView'視圖中。 – Codejoy

1

getStringFromUrlgetInputStreamFromUrl需要在doInBackground()中調用。您不必從doInBackground()中返回boolean,您可以返回文本並將其設置爲onPostExecute中的文本視圖。只有doInBackground()方法在新線程中運行,因此您需要在此處執行與網絡相關的所有操作,並更新onPostExecute()中的UI。