2014-02-23 3 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

Вы можете попробовать использовать Google для поиска документов или учебного пособия. – Emmanuel

ответ

1

Вы не можете использовать сетевые коммуникации в потоке пользовательского интерфейса. Поскольку вы правильно упоминаете, вы должны использовать 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

Ok Ive положил его в onclicklistener, но теперь у меня возникла ошибка: «Тип new AsyncTask () {} должен реализовать наследуемый абстрактный метод AsyncTask .doInBackground (Object ...)». Я считаю, что мне нужно расширить ASyncTask в моем классе, но мой класс уже расширяет Activity, поэтому я не могу это сделать. – Noob

+0

Вы вызываете 'новый AsyncTask(). Execute();' на свой 'onCreate()'? –

Смежные вопросы