运行此代码时出现 ANR 强制关闭

发布于 2024-12-14 20:34:26 字数 1719 浏览 0 评论 0原文

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

我在这里尝试做的是 updater 活动将检查最新版本,如果有新版本,它将弹出 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
    }
}

This code is causing ANR force close any idea how to improve this code? i try with asynctask and i cant make it work in this code :

What i try to do here is updater activity will check for latest version and if got new version it will pop up alertdialog to ask user to update in the market

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

源来凯始玺欢你 2024-12-21 20:34:26

您可以使用 AsyncTask - 是的。在 doInBackground 中,您可以添加来自 getServerVerCode() 的代码,并在 onPostExecute 中添加 if (getServerVerCode()) 中的所有内容>。
doInBackground 可以返回布尔值,因此您可以在 onPostExecute 中知道结果是什么。
像这样的东西:

私有类 GetServerVerCode 扩展 AsyncTask { 

    @覆盖 
    protected Boolean doInBackground(Void... params) {
      尝试 {
        字符串 verjson = NetworkTool.getContent(Config.UPDATE_SERVER
                + 配置.UPDATE_VERJSON);
        JSONArray 数组 = 新 JSONArray(verjson);
        if (array.length() > 0) {
            JSONObject obj = array.getJSONObject(0);
            尝试 {
                newVerCode = Integer.parseInt(obj.getString("verCode"));
                newVerName = obj.getString("verName");
            } catch (异常 e) {
                新版本代码 = -1;
                新版本名称 = "";
                返回假;
            }
        }
    } catch (异常 e) {

        返回假;

    }
    返回真;
    } 

    @覆盖
    protected void onPostExecute(布尔结果) {
        如果(结果){
            int vercode = Config.getVerCode(this);
            if (newVerCode > vercode) {
                doNewVersionUpdate();

            } 别的 {
                notNewVersionShow();
            }
        }
    }
}

You can use an AsyncTask - yes. In doInBackground you can add the code from getServerVerCode() and in onPostExecute everything in the if (getServerVerCode()).
doInBackground can return boolean so you know in onPostExecute what the result is.
Something like this:

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();
            }
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文