#java #android #json #android-asynctask
#java #Android #json #android-asynctask
Вопрос:
Этот код вызывает принудительное закрытие ANR, есть идеи, как улучшить этот код? я пытаюсь использовать asynctask и не могу заставить его работать в этом коде :
Что я пытаюсь здесь сделать, так это то, что активность программы обновления будет проверять наличие последней версии, и если будет получена новая версия, появится 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
}
}
Ответ №1:
Вы можете использовать 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();
}
}
}
}
Комментарии:
1. вау! Спасибо! это было быстро, я все еще пытался это реализовать