2013-04-08 61 views
0

我正在使用服务在我的应用程序中运行长时间的后台任务,在这些服务中,这些函数正在运行登录到XMPP并从XMPP服务器获取一些数据。我想显示登录完成后的进度条。如何从服务到活动获取响应以正确更新进度栏以避免UI中出现一些异常。这样如何获取进度对话框,直到从android中获取服务响应?

final Intent gtalk_intent = new Intent(AccountsActivity.this, GtalkService.class);    
gtalk_intent.putExtra("user_name", acc.getAcc_Name()); 
gtalk_intent.putExtra("user_pass", acc.getAcc_Pass());    
startService(gtalk_intent); 

这 我打电话的服务是从服务

public class PmService extends Service { 

    @Override 
    public IBinder onBind(Intent intent) {    
     return mBinder; 
    } 

    public class PmBinder extends Binder { 
     public PmService getService() { 
     return PmService.this; 
     } 
    } 

    @Override 
    public void onCreate() { 

     super.onCreate(); 
     context = this;  
     app_preferences = new AppPreferences(this); 

     chat_source = new ChatsDataSource(this); 
     chat_source.open(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Bundle extras = intent.getExtras();  
     if(extras == null) {   
     full_name = extras.getString("user_name"); 
     if(full_name.contains("@")) { 
      String[] _na = full_name.split("@"); 
      U_name = _na[0]; 
     } 
     U_pass = extras.getString("user_pass");      
    }  
    new PmAsync().execute(); 
    return START_STICKY; 
} 

private class PmAsync extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() {   
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Void result) {   
     super.onPostExecute(result); 
    } 

    @Override 
    protected Void doInBackground(Void... params) {  
     SASLAuthentication.supportSASLMechanism("PLAIN", 0); 
     ConnectionConfiguration config = new ConnectionConfiguration(server_host, SERVER_PORT, SERVICE_NAME); 
     configure(ProviderManager.getInstance()); 
     m_connection = new XMPPConnection(config); 
     try {    
      m_connection.connect();     
      Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);    
     } catch (XMPPException e) {    
      e.printStackTrace(); 
     }   
     try {    
      m_connection.login(U_name, U_pass); 
      setPacketFilters();      
     } catch (XMPPException e) {     
     } 

     return null; 
    }  
} 

我想显示进度条高达登录完成了代码,如何从服务响应登录后完成?

+0

您的'活页夹'的调用方法 – 2013-04-08 06:50:07

+0

@DmitryZaitsev如何?可以提供任何与此相关的示例代码。 – 2013-04-08 06:58:47

回答

-1

您可以通过覆盖onProgress()方法更新进度条 这里是一个接近你的案例,你可以参考。 link

+0

onProgressUpdate()是你必须覆盖的方法, 这个方法在AsynckTask中 – M090009 2013-04-08 07:15:22

+0

我不是在讨论在asyncTask中显示进度,它与服务有关。清楚地看问题。 – 2013-04-08 07:16:49

+0

抱歉,男人不能帮你 – M090009 2013-04-08 07:23:21

0

通过Binder您可以发送回调到您的Activity,这意味着您可以更新UI。根据

  1. Add方法您Binder(让我们将其命名为onProgress
  2. 从这个Binder
  3. AsyncTask调用方法为了了解进度更新考虑使用观察者模式(换句话说 - 你Activity应该听取您的Binder的更新,或者更具体地说 - 致电Binder.onProgress方法)
+0

我不知道如何开始这个,你可以发布任何教程。 – 2013-04-09 05:30:55

+0

@RajaReddyPolamReddy对不起,我给了你足够的信息 - 你可以自己做。此链接对您有用:http://developer.android.com/guide/components/bound-services.html – 2013-04-09 06:33:23

相关问题