Android:应用程序在网络连接不起作用时崩溃

时间:2012-06-04 22:11:41

标签: android

我的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也会返回一个空字符串,而我正在尝试使用它。

1 个答案:

答案 0 :(得分: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。这取决于你。