我的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也会返回一个空字符串,而我正在尝试使用它。
答案 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() {
}
});
或使用Handler
或AsyncTask
当您决定使用AsyncTask
时,您只需显示几乎所有内容
protected void onProgressUpdate(String... data) {
if(data[0].equals("error")) {
Toast.makeText(Activity.this, "Connection is busy!", Toast.LENGTH_SHORT).show();
}
也只是显示Dialog
。这取决于你。