2013-06-02 23 views
3

我是Android新手,我想为它创建简单的应用程序。这是它应该如何工作:活动 - 如何与他们合作?

  1. 应用程序有3个活动:主要活动,创建玩家活动,连接拒绝活动。
    • 主要活动表明球员名单
    • 创建玩家活动允许用户创建账户
    • 连接时与服务器连接已中断
    • 拒绝显示活动
  2. 应用流程是这样的(“ - >的“是指应用程序允许去从一个活动到另一个):
    • main->创建
    • create->主(使用后退按钮)
    • * - > connection_refused - > *:这个活动是特殊的,因为它会在上面显示,当与服务器的连接已被拒绝,因此是独立于其他活动,并可以在任何时间
  3. 插座显示连接在应用程序中使用
  4. 每个活动observer所以它将被observable通知时数据的变化,例如:
    • 用户已创建帐户:服务器会发送通知给所有用户,一些用户已创建帐户,以便列表需要更新main activity的球员
    • 服务器由于某些问题而被关闭:客户端每隔5秒检查一次连接,如果连接被拒绝,它将向connection refused活动发送通知。之后,信息活动应该显示在其他(主动)活动之上。
    • 最好的将是,如果connection refused活动将一直活着,所以我就可以显示/隐藏在任何时候

问题:

  1. 如何显示connection refused在其他(主动)活动之上的活动?几乎应用程序中的所有内容都能正常工作(连接被拒绝的活动会被通知连接已被拒绝),但我不知道如何将其带到最前。
  2. 活动是否适合这个问题,或者我应该使用其他解决方案?
  3. 如果与服务器的连接已被拒绝,则应阻止所有活动,并应在顶部显示connection refused活动。用户不应该有可能回到被阻止的活动。

ConnectionRefusedActivity:

public class ConnectionRefusedActivity extends Activity implements Observer { 

    private ServerService service; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     service = ServerService.getInstance(); 
     service.addObserver(this); 

     progressDialog = new ProgressDialog(this); 
     alertDialog = new AlertDialog.Builder(this).create(); 
     alertDialog.setMessage("Unable to connect to server. Click OK to reconnect."); 
     alertDialog.setButton("OK", new OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       service.connect(); 
      } 
     }); 
     progressDialog.setMessage("Please wait..."); 
     // this method tries to connect to server; if it fails `service` will sernd notification to this activity with data `false` 
     service.connect(); 
    } 

    @Override 
    public void update(final Observable observable, final Object data) { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       if (observable instanceof ServerService) { 
        boolean isConnected = (Boolean) data; 
        if (isConnected) { 
         progressDialog.dismiss(); 
         alertDialog.dismiss(); 
        } 
        else { 
         // this will be called if connection with server has been refused; the problem is that I don't know how to bring this activity to top 
         // ATTENTION! I want to bring this activity to top here 
         progressDialog.show(); 
         alertDialog.show(); 
        } 
       } 
      } 
     }); 
    } 
} 
  1. 示例使用情形:
    • 用户为主要活动
    • 用户希望让他去创造用户活动
    • 用户创建新的播放器想点击“创建用户”,但此时与服务器的连接被拒绝
    • connection refused activity被通知连接已被拒绝,因此它显示信息“连接已被拒绝。是否要重新连接?”用户
    • 用户点击‘是的,我要重新连接’,此时服务器工作,所以应用程序尝试重新连接,并隐藏connection refused activity
+0

你是什么意思的“带到上面”?如果你开始一项活动,它会自动进入顶部..你想带来一个已经打开的垃圾活动? – stinepike

+0

这意味着当与服务器的连接被拒绝时,此活动需要对用户可见。例如:用户正在从“主要活动”转移到“创建玩家活动”,并且当他想创建新玩家时,与服务器的连接会中断。此时显示“拒绝连接活动”,并通知用户。清楚吗? – pepuch

+0

什么是代码监视连接到服务器,说它的服务,你可以从那里开始广播活动。 – Neil

回答

1

这就是你可以做,

不要把ConnectionRefusedActivity作为观察者,其余2个活动应该是观察者,最好的方法是保持一个实现观察者的BaseActivity,当观察者被通知时,打开ConnectionRefusedActivitystartActivityForResult。当用户尝试重新连接时,发送结果返回重新连接。在各自的活动中再次重新连接。

+0

谢谢。我会尽力这样做。 – pepuch

相关问题