0

我的 Android 游戏需要从我的服务器获取有关玩家的一些信息。我通过一个简单的 HTTP GET 请求来执行此操作,该请求放在一个线程中。

我正在使用的代码如下。当我的服务器启动并运行应用程序时,它工作正常。但是,当我的服务器没有响应(因为它很忙或关闭)时,应用程序就会崩溃。

我不想让应用程序崩溃,而是向用户显示“网络繁忙”消息并将他送回主要活动,但不知道该怎么做。

我试图在 Catch 部分中创建一个对话框,认为这会显示我的服务器是否已关闭,但它没有显示并且应用程序崩溃。

有什么想法可以解决这个问题吗?

public void run(){      
        String urlstring = "http://www.mydomain.com/?param=test"; 
        try{                        
                URL url = new URL(urlstring);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                line = reader.readLine();   
        }
        catch(Exception e){
            Dialog d2 = new Dialog(context);
            d2.setContentView(R.layout.dialog2);
            d2.show();
        } 
}

更新:我想我在查看 logcat 时发现了问题。即使服务器关闭,我的 BufferedReader 也返回一个空字符串,我试图在以后使用它。

4

1 回答 1

2

所以首先,你应该检查你的反应。这是最好的方法

if (urlConntection.getResponseCode() == HttpURLConnection.HTTP_OK) {
  // method body
}
else {
   /// get some info for example with Toast or Dialog
}

您应该决定runOnUiThread在要更新时UI使用Non-UI thead

YourActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {

            }
        });

或使用HandlerAsyncTask

当您决定使用AsyncTask时,您可以简单地显示几乎所有内容

protected void onProgressUpdate(String... data) {
  if(data[0].equals("error")) {
    Toast.makeText(Activity.this, "Connection is busy!", Toast.LENGTH_SHORT).show(); 
}

也简单地显示Dialog。由你决定。

于 2012-06-04T22:48:22.857 回答