Java 运行此代码时强制关闭
此代码导致ANR强制关闭。您知道如何改进此代码吗?我尝试使用asynctask,但在以下代码中无法使其工作: 我在这里尝试做的是更新程序活动将检查最新版本,如果获得新版本,它将弹出警报对话框,要求用户在市场上更新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
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();
}
}
}
}