Java 运行此代码时强制关闭

Java 运行此代码时强制关闭,java,android,json,android-asynctask,Java,Android,Json,Android Asynctask,此代码导致ANR强制关闭。您知道如何改进此代码吗?我尝试使用asynctask,但在以下代码中无法使其工作: 我在这里尝试做的是更新程序活动将检查最新版本,如果获得新版本,它将弹出警报对话框,要求用户在市场上更新 public class Updater extends Activity { private int newVerCode = 0; private String newVerName = ""; @Override protected void

此代码导致ANR强制关闭。您知道如何改进此代码吗?我尝试使用asynctask,但在以下代码中无法使其工作:

我在这里尝试做的是更新程序活动将检查最新版本,如果获得新版本,它将弹出警报对话框,要求用户在市场上更新

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
    }
}

您可以使用异步任务-是。在
doInBackground
中,可以从
getServerVerCode()
onPostExecute
中添加
if(getServerVerCode())
中的所有内容。
doInBackground
可以返回布尔值,以便在
onPostExecute
中知道结果是什么。 大概是这样的:

私有类GetServerVerCode扩展异步任务{
@凌驾
受保护的布尔doInBackground(Void…params){
试一试{
String verjson=NetworkTool.getContent(Config.UPDATE\u服务器
+Config.UPDATE_VERJSON);
JSONArray数组=新的JSONArray(verjson);
if(array.length()>0){
JSONObject obj=array.getJSONObject(0);
试一试{
newVerCode=Integer.parseInt(obj.getString(“verCode”);
newVerName=obj.getString(“verName”);
}捕获(例外e){
newVerCode=-1;
newVerName=“”;
返回false;
}
}
}捕获(例外e){
返回false;
}
返回true;
} 
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果){
int vercode=Config.getVerCode(这个);
if(newVerCode>vercode){
doNewVersionUpdate();
}否则{
notNewVersionShow();
}
}
}
}

哇!谢谢那很快,我还在努力实现它
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();
            }
        }
    }
}