2014-02-23 66 views
-1

我試圖從位於在線的文本文件中讀取一個字符串,然後將內容保存到變量中。這是我目前的代碼:如何在我的應用程序中實現我的代碼中的ASyncTask

 download.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

      try { 
       URL site = new URL("http://m.uploadedit.com/b029/1393133970157.txt"); 
       Scanner s = new Scanner(site.openStream()); 
       String num = s.nextLine(); 
      } 
      catch(MalformedURLException e) { 
       e.printStackTrace(); 
      } 
      catch(IOException e) { 
       e.printStackTrace();    
      }      

      Toast.makeText(getApplicationContext(), "String from file is: " + num, 
      Toast.LENGTH_LONG).show(); 

     } 
    }); 

但是,這給了我一個力量關閉。這裏是日誌:http://pastebin.com/2nsxmJz1 我相信我需要實現一個ASyncTask,但不知道如何去做。

+1

你可以嘗試使用谷歌找到文檔或教程。 – Emmanuel

回答

1

您不能在UI線程上使用網絡通信。正如你正確地提到你應該使用AsyncTask這種情況下:

final AsyncTask<Object,Object,String> task = new AsyncTask<Object,Object,String>() { 
    protected String doInBackground(Object... o) { 
     try { 
      URL site = new URL("http://m.uploadedit.com/b029/1393133970157.txt"); 
      Scanner s = new Scanner(site.openStream()); 
      return s.nextLine(); 
     } 
     catch(MalformedURLException e) { 
      throw new RuntimeException("Incorrect URL", e); 
     } 
     catch(IOException e) { 
      throw new RuntimeException("Can't fetch file content from url", e); 
     } 
    } 

    protected void onPostExecute(String r) { 
     Toast.makeText(getApplicationContext(), "String from file is: " + r, 
     Toast.LENGTH_LONG).show(); 
    } 
}; 
task.execute(); 
+0

謝謝,那麼這仍然會進入我的onclicklistener? – Noob

+0

確定我把它放在onclicklistener中,但是現在我得到一個錯誤:「新的AsyncTask (){}必須實現繼承的抽象方法AsyncTask .doInBackground(Object ...)」。我相信我需要在我的類中擴展ASyncTask,但是我的類已經擴展了Activity,所以我不能這樣做。 – Noob

+0

你是否在'onCreate()'上調用'new AsyncTask()。execute();''? –

相關問題