Android 安卓:当网络连接不工作时,应用程序正在崩溃

Android 安卓:当网络连接不工作时,应用程序正在崩溃,android,Android,我的Android游戏需要从我的服务器获取一些关于玩家的信息。我通过一个简单的HTTPGET请求来实现这一点,我将它放在一个线程中 下面是我正在使用的代码。当我的服务器启动并运行时,应用程序工作正常。但是,当我的服务器没有响应时(因为忙或停机),应用程序就会崩溃 我不想让应用程序崩溃,而是想向用户显示一条“网络正忙”的消息,并将其发送回主要活动,但不确定如何执行 我试图在Catch部分中创建一个对话框,认为这会显示我的服务器是否关闭,但它不会显示,应用程序会崩溃 有没有办法解决这个问题 publ

我的Android游戏需要从我的服务器获取一些关于玩家的信息。我通过一个简单的HTTPGET请求来实现这一点,我将它放在一个线程中

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

我不想让应用程序崩溃,而是想向用户显示一条“网络正忙”的消息,并将其发送回主要活动,但不确定如何执行

我试图在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仍返回一个空字符串,我一直在尝试使用它

所以首先,你应该检查一下你的回答。这是最好的办法

if (urlConntection.getResponseCode() == HttpURLConnection.HTTP_OK) {
  // method body
}
else {
   /// get some info for example with Toast or Dialog
}
当您想从
非UI thead
更新
UI
时,应决定使用
runOnUiThread

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

            }
        });
或者使用
处理程序
异步任务

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

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

也只需显示
对话框
。如果你想在UI线程上做一些事情(比如打开对话框,修改视图等),你应该考虑使用<代码> AycCastase<代码>。哦,发布logcat的堆栈跟踪。如果我在“捕获”部分没有做任何事情,应用程序仍在崩溃,因此我认为这与我的对话框无关。那么,139行上的任何东西都是罪魁祸首。您是否在不检查列表边界的情况下从列表中获取要下载的URL?