2011-11-10 15 views
1

このコードは、このコードを改善する方法をANR強制終了の原因としていますか?私はasynctaskで試してみて、私はそれがこのコードで動作させるカント:このコードを実行するとANR強制終了

何私はここでやろうと、活動が最新バージョンを確認し、新しいバージョンを得た場合、それがユーザーに尋ねること alertdialog をポップアップ表示されますアップデータです市場での更新

public class Updater extends Activity { 

    private int newVerCode = 0; 
    private String newVerName = ""; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

     if (getServerVerCode()) { 
      int vercode = Config.getVerCode(this); 
      if (newVerCode > vercode) { 
       doNewVersionUpdate(); 

      } else { 
       notNewVersionShow(); 
      } 
     } 

    } 
//check version using json 
    private boolean getServerVerCode() { 
     try { 
      String verjson = NetworkTool.getContent(Config.UPDATE_SERVER 
        + Config.UPDATE_VERJSON); 
      JSONArray array = new JSONArray(verjson); 
      if (array.length() > 0) { 
       JSONObject obj = array.getJSONObject(0); 
       try { 
        newVerCode = Integer.parseInt(obj.getString("verCode")); 
        newVerName = obj.getString("verName"); 
       } catch (Exception e) { 
        newVerCode = -1; 
        newVerName = ""; 
        return false; 
       } 
      } 
     } catch (Exception e) { 

      return false; 

     } 
     return true; 
    } 
//Found No new version 
    private void notNewVersionShow() { 
     Updater.this.finish(); // End updater activity 
    } 

//Found New version 
    private void doNewVersionUpdate() { 
//Display alertdialog 
    } 
} 

答えて

2

AsyncTaskを使用することができます。 doInBackgroundには、getServerVerCode()のコードとonPostExecuteのコードをすべてif (getServerVerCode())に追加できます。 doInBackgroundは、結果が何であるかをonPostExecuteで知るようにブール値を返すことができます。このような 何か:

private class GetServerVerCode extends AsyncTask<Void, Void, Boolean> { 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     try { 
     String verjson = NetworkTool.getContent(Config.UPDATE_SERVER 
       + Config.UPDATE_VERJSON); 
     JSONArray array = new JSONArray(verjson); 
     if (array.length() > 0) { 
      JSONObject obj = array.getJSONObject(0); 
      try { 
       newVerCode = Integer.parseInt(obj.getString("verCode")); 
       newVerName = obj.getString("verName"); 
      } catch (Exception e) { 
       newVerCode = -1; 
       newVerName = ""; 
       return false; 
      } 
     } 
    } catch (Exception e) { 

     return false; 

    } 
    return true; 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     if (result) { 
      int vercode = Config.getVerCode(this); 
      if (newVerCode > vercode) { 
       doNewVersionUpdate(); 

      } else { 
       notNewVersionShow(); 
      } 
     } 
    } 
} 
+0

すごいです!ありがとう!それは速かった、私はまだそれを実装しようとしていた – xAnGz

関連する問題