2013-01-14 57 views
0

我已經創建了一個意圖下載服務,並且我想要將下載數據傳遞給Toast並在主要活動中傳入文本。下載服務應該從報警管理器重複啓動。我該怎麼做呢?如何從意向下載服務訪問變量?

目前,它不顯示在吐司,但我有網絡流量;數據已下載但未顯示。

相關代碼:

public class DownloadService extends IntentService { 

public String response; 

    public DownloadService() { 
    super("DownloadService"); 
    } 

    // Will be called asynchronously be Android 
    @Override 
    protected void onHandleIntent(Intent intent) { 

    //String urldown = intent.getStringExtra("url"); 
    String urldown="http://......"; 

     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(urldown); 
     try { 
      HttpResponse execute = client.execute(httpGet); 
      InputStream content = execute.getEntity().getContent(); 

      BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); 
      String s = ""; 
      while ((s = buffer.readLine()) != null) { 
      response += s; 
      } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
     Intent intentsend=new Intent("update"); 
      intentsend.putExtra("downdata",response); 
      sendBroadcast(intentsend); 
    } 
+1

爲什麼使用吐司?當您需要顯示服務的某種反饋時,通常會使用通知。 –

+0

我如何做到這一點?以及如何將下載數據作爲文本傳遞給main.xml? – user1977741

+1

如果您需要服務和活動之間的雙向溝通​​ - 您可以將服務綁定到活動。檢查[this](http://stackoverflow.com/questions/4300291/example-communication-between-activity-and-service-using-messaging)問題。 –

回答

1

這可以用BroadcastReceiver實現:

在你的活動中,添加以下代碼:

private BroadcastReceiver updateReceiver; 

//... 

@Override 
protected void onResume() { 
    super.onResume(); 

    updateReceiver=new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      //get extras, do some stuff 
     } 
    }; 
    IntentFilter updateIntentFilter=new IntentFilter("update"); 
    registerReceiver(updateReceiver, updateIntentFilter); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 

    if (this.updateReceiver!=null) 
     unregisterReceiver(updateReceiver); 
} 

,然後在你的IntentService,只要發送以相同動作廣播:

Intent intent=new Intent("update"); 
intent.putExtra(...); 
sendBroadcast(intent); 
+0

發送數據到intentservice中的活動的最後一塊?在hanleintent之後?對不起,我是新開發者... – user1977741

+0

我更新了我的代碼...看起來...這是好的嗎? – user1977741

+0

謝謝!!!工作!!!!!! – user1977741

0

對我個人而言,接收器不工作,所以我創建了一個單例類,我使用setter方法設置變量,並使用getter方法讓它們進入特定的活動。