2013-01-14 29 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方法让它们进入特定的活动。