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更新するときに使用することを決定する必要がありますUINon-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。それはあなた次第です。

于 2012-06-04T22:48:22.857 に答える