遇到一个问题弄得我这个新手焦头烂额。
app使用的是LoonAndroid.jar 的包开发的app版本自动更新,
但是在某些机型(一般在Android6.0以上发生)例如荣耀V9上面会发生“下载失败”的问题,如图
代码如下: /**
* 检查更新接口
*
* @param context
*/
private void ajaxWebSelectVersion(Context context, int key, String USR_ID) { //LinkedHashMap
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>(); // //加密得到密文
String platform = DESUtils.desEncryption("1");
linkedHashMap.put(Constants.Params.USR_ID, DESUtils.desEncryption(USR_ID));
linkedHashMap.put(Constants.Params.PLATFORM, platform); //InternetConfig
InternetConfig internetConfig = new InternetConfig();
internetConfig.setKey(key);
internetConfig.setTimeout(Constants.InternetConfig.TIME_OUT10);
internetConfig.setHttps(true); //ajaxWebServer
FastHttpHander.ajaxWebServer(Constants.URL.COMM_WEB_SERVICE_URL, Constants.CommWebServiceMethod.SELECT_VERSION, linkedHashMap, internetConfig, this);
} /**
* 注解 loonandroid请求返回
*
* @param responseEntity
*/
@InjectHttp
private void injectHttp(ResponseEntity responseEntity) {
if (null != responseEntity) {
int status = responseEntity.getStatus();
if (FastHttp.result_ok == 0) {
int key = responseEntity.getKey();
if (key == Constants.InternetConfig.KEY0X01) {//检查更新接口
String result = responseEntity.getContentAsString();
parsingJsonSelectVersion(this, result); // TODO: 2017/10/17
}
} else if (FastHttp.result_net_err == status) {
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
}
}
} private String URL;
private Double VERSIONNUM; /**
* 解析JSON数据>>>检查更新接口
*
* @param context
* @param result
*/
private void parsingJsonSelectVersion(Context context, String result) {
try {
JSONArray jsonArray = new JSONArray(result); int l = jsonArray.length();
if (l > 0) {
JSONObject jsonObjectContent = jsonArray.optJSONObject(0);
String PLATFORM = jsonObjectContent.optString("PLATFORM");//平台
VERSIONNUM = jsonObjectContent.optDouble("VERSIONNUM");//版本号
// int versioncode = Utils.getAppVersioncode(SplashActivity.this);
double versioncode = Utils.getAppVersioncode(MainActivity.this);
URL = jsonObjectContent.optString("URL").trim();//新版本下载URL
// if (false&&versioncode != -1 && !TextUtils.isEmpty(URL)) {//调检查版本接口成功
if (versioncode != -1 && !TextUtils.isEmpty(URL)) {//调检查版本接口成功
if (VERSIONNUM <= versioncode) {//没有新版本,正常进入应用
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
} else {//有新版本
showUpdateDialog(VERSIONNUM);
}
} else {//检查更新失败,正常进入应用
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
// ToastUtils.show(context, R.string.network_busy_please_try_again_later);
}
} catch (JSONException e) {
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
e.printStackTrace();
// ToastUtils.show(context, R.string.network_busy_please_try_again_later);
}
}
private OneBtnDialog oneBtnDialog;
private void showUpdateDialog(Double VERSIONNUM) {//弹出更新对话框,提示更新,点更新下载新安装包
oneBtnDialog = new OneBtnDialog(this);//底部有一个操作按钮的通用对话框
oneBtnDialog.setCancelable(false);
oneBtnDialog.setTitle("");//提示
oneBtnDialog.setTitleTextColor(R.color.c_24);//标题颜色
oneBtnDialog.setContent("新版本"+VERSIONNUM);//新版本
oneBtnDialog.setContentTextColor(R.color.c_24);//内容颜色
oneBtnDialog.setBtnText(R.string.update);//按钮文本》更新
oneBtnDialog.setBtnTextColor(R.color.c_d9c08a);//按钮文本颜色
//oneBtnDialog.setBtnTextColor(R.color.c_d9c08a);//右侧按钮文本颜色
oneBtnDialog.setBtnOnClickListener(this);//左侧按钮点击事件
oneBtnDialog.show();
} @Override
public void onClick(View view) {
// 下载apk
// URL = "http://dldir1.qq.com/weixin/android/weixin6315android760.apk";
//判断文件目录是否存在,不存在多级目录分别创建之
String cacheFolder = Constants.UserCache.CACHE_FOLDER;
File file0 = new File(cacheFolder);
if (!file0.exists()) {//检查图片存放的文件夹是否存在
file0.mkdirs();//不存在的话 创建文件夹s
}
NotfiEntity notfiEntity = new NotfiEntity();
notfiEntity.setLayout_id(R.layout.nf_update_layout);
notfiEntity.setIcon_id(R.id.iv);
notfiEntity.setProgress_id(R.id.pb);
// notfiEntity.setProgress_txt_id(R.id.tv);
// notfiEntity.setClazz(SplashActivity.class); String fileName = cacheFolder + File.separator + "zxtx_" + TimeUtils.getTime(System.currentTimeMillis(), TimeUtils.DEFAULT_DATE_FORMAT) + ".apk";
FileLoaderManager.downloadUpdate(URL, fileName, 3, notfiEntity);
oneBtnDialog.dismiss();
finish(); }然后我在网络平台上面找了一个荣耀v9测试,得到的日志报错如下:
ERROR15:11:30.77630066WindowManager at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
ERROR15:11:30.77630066WindowManager at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
ERROR15:11:30.77630066WindowManager at java.lang.reflect.Method.invoke(Native Method)
ERROR15:11:30.77630066WindowManager at android.app.ActivityThread.main(ActivityThread.java:5422)
ERROR15:11:30.77630066WindowManager at android.os.Looper.loop(Looper.java:148)
ERROR15:11:30.77630066WindowManager at android.os.Handler.dispatchMessage(Handler.java:102)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttp$AjaxTask$1.handleMessage(FastHttp.java:1129)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttpHander$4.callBack(FastHttpHander.java:406)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttpHander.access$0(FastHttpHander.java:461)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttpHander.http_inject(FastHttpHander.java:484)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.invoker.InjectHttps.invoke(InjectHttps.java:25)
ERROR15:11:30.77630066WindowManager at java.lang.reflect.Method.invoke(Native Method)
ERROR15:11:30.77630066WindowManager at mobi.com.myapplication.MainActivity.injectHttp(MainActivity.java:92)
ERROR15:11:30.77630066WindowManager at mobi.com.myapplication.MainActivity.parsingJsonSelectVersion(MainActivity.java:128)
ERROR15:11:30.77630066WindowManager at mobi.com.myapplication.MainActivity.showUpdateDialog(MainActivity.java:156)
ERROR15:11:30.77630066WindowManager at android.app.Dialog.show(Dialog.java:319)
ERROR15:11:30.77630066WindowManager at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
ERROR15:11:30.77630066WindowManager at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:299)
ERROR15:11:30.77630066WindowManager at android.view.ViewRootImpl.<init>(ViewRootImpl.java:372)
ERROR15:11:30.77630066WindowManagerandroid.view.WindowLeaked: Activity mobi.com.myapplication.MainActivity has leaked window com.android.internal.policy.PhoneWindow$DecorView{99e84fc V.E...... R....... 0,0-1152,523} that was originally added here报错信息中的
(MainActivity.java:92)
(MainActivity.java:128)
(MainActivity.java:156)
分别指的是39、73、100行
app使用的是LoonAndroid.jar 的包开发的app版本自动更新,
但是在某些机型(一般在Android6.0以上发生)例如荣耀V9上面会发生“下载失败”的问题,如图
代码如下: /**
* 检查更新接口
*
* @param context
*/
private void ajaxWebSelectVersion(Context context, int key, String USR_ID) { //LinkedHashMap
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>(); // //加密得到密文
String platform = DESUtils.desEncryption("1");
linkedHashMap.put(Constants.Params.USR_ID, DESUtils.desEncryption(USR_ID));
linkedHashMap.put(Constants.Params.PLATFORM, platform); //InternetConfig
InternetConfig internetConfig = new InternetConfig();
internetConfig.setKey(key);
internetConfig.setTimeout(Constants.InternetConfig.TIME_OUT10);
internetConfig.setHttps(true); //ajaxWebServer
FastHttpHander.ajaxWebServer(Constants.URL.COMM_WEB_SERVICE_URL, Constants.CommWebServiceMethod.SELECT_VERSION, linkedHashMap, internetConfig, this);
} /**
* 注解 loonandroid请求返回
*
* @param responseEntity
*/
@InjectHttp
private void injectHttp(ResponseEntity responseEntity) {
if (null != responseEntity) {
int status = responseEntity.getStatus();
if (FastHttp.result_ok == 0) {
int key = responseEntity.getKey();
if (key == Constants.InternetConfig.KEY0X01) {//检查更新接口
String result = responseEntity.getContentAsString();
parsingJsonSelectVersion(this, result); // TODO: 2017/10/17
}
} else if (FastHttp.result_net_err == status) {
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
}
}
} private String URL;
private Double VERSIONNUM; /**
* 解析JSON数据>>>检查更新接口
*
* @param context
* @param result
*/
private void parsingJsonSelectVersion(Context context, String result) {
try {
JSONArray jsonArray = new JSONArray(result); int l = jsonArray.length();
if (l > 0) {
JSONObject jsonObjectContent = jsonArray.optJSONObject(0);
String PLATFORM = jsonObjectContent.optString("PLATFORM");//平台
VERSIONNUM = jsonObjectContent.optDouble("VERSIONNUM");//版本号
// int versioncode = Utils.getAppVersioncode(SplashActivity.this);
double versioncode = Utils.getAppVersioncode(MainActivity.this);
URL = jsonObjectContent.optString("URL").trim();//新版本下载URL
// if (false&&versioncode != -1 && !TextUtils.isEmpty(URL)) {//调检查版本接口成功
if (versioncode != -1 && !TextUtils.isEmpty(URL)) {//调检查版本接口成功
if (VERSIONNUM <= versioncode) {//没有新版本,正常进入应用
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
} else {//有新版本
showUpdateDialog(VERSIONNUM);
}
} else {//检查更新失败,正常进入应用
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
// ToastUtils.show(context, R.string.network_busy_please_try_again_later);
}
} catch (JSONException e) {
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
e.printStackTrace();
// ToastUtils.show(context, R.string.network_busy_please_try_again_later);
}
}
private OneBtnDialog oneBtnDialog;
private void showUpdateDialog(Double VERSIONNUM) {//弹出更新对话框,提示更新,点更新下载新安装包
oneBtnDialog = new OneBtnDialog(this);//底部有一个操作按钮的通用对话框
oneBtnDialog.setCancelable(false);
oneBtnDialog.setTitle("");//提示
oneBtnDialog.setTitleTextColor(R.color.c_24);//标题颜色
oneBtnDialog.setContent("新版本"+VERSIONNUM);//新版本
oneBtnDialog.setContentTextColor(R.color.c_24);//内容颜色
oneBtnDialog.setBtnText(R.string.update);//按钮文本》更新
oneBtnDialog.setBtnTextColor(R.color.c_d9c08a);//按钮文本颜色
//oneBtnDialog.setBtnTextColor(R.color.c_d9c08a);//右侧按钮文本颜色
oneBtnDialog.setBtnOnClickListener(this);//左侧按钮点击事件
oneBtnDialog.show();
} @Override
public void onClick(View view) {
// 下载apk
// URL = "http://dldir1.qq.com/weixin/android/weixin6315android760.apk";
//判断文件目录是否存在,不存在多级目录分别创建之
String cacheFolder = Constants.UserCache.CACHE_FOLDER;
File file0 = new File(cacheFolder);
if (!file0.exists()) {//检查图片存放的文件夹是否存在
file0.mkdirs();//不存在的话 创建文件夹s
}
NotfiEntity notfiEntity = new NotfiEntity();
notfiEntity.setLayout_id(R.layout.nf_update_layout);
notfiEntity.setIcon_id(R.id.iv);
notfiEntity.setProgress_id(R.id.pb);
// notfiEntity.setProgress_txt_id(R.id.tv);
// notfiEntity.setClazz(SplashActivity.class); String fileName = cacheFolder + File.separator + "zxtx_" + TimeUtils.getTime(System.currentTimeMillis(), TimeUtils.DEFAULT_DATE_FORMAT) + ".apk";
FileLoaderManager.downloadUpdate(URL, fileName, 3, notfiEntity);
oneBtnDialog.dismiss();
finish(); }然后我在网络平台上面找了一个荣耀v9测试,得到的日志报错如下:
ERROR15:11:30.77630066WindowManager at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
ERROR15:11:30.77630066WindowManager at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
ERROR15:11:30.77630066WindowManager at java.lang.reflect.Method.invoke(Native Method)
ERROR15:11:30.77630066WindowManager at android.app.ActivityThread.main(ActivityThread.java:5422)
ERROR15:11:30.77630066WindowManager at android.os.Looper.loop(Looper.java:148)
ERROR15:11:30.77630066WindowManager at android.os.Handler.dispatchMessage(Handler.java:102)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttp$AjaxTask$1.handleMessage(FastHttp.java:1129)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttpHander$4.callBack(FastHttpHander.java:406)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttpHander.access$0(FastHttpHander.java:461)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttpHander.http_inject(FastHttpHander.java:484)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.invoker.InjectHttps.invoke(InjectHttps.java:25)
ERROR15:11:30.77630066WindowManager at java.lang.reflect.Method.invoke(Native Method)
ERROR15:11:30.77630066WindowManager at mobi.com.myapplication.MainActivity.injectHttp(MainActivity.java:92)
ERROR15:11:30.77630066WindowManager at mobi.com.myapplication.MainActivity.parsingJsonSelectVersion(MainActivity.java:128)
ERROR15:11:30.77630066WindowManager at mobi.com.myapplication.MainActivity.showUpdateDialog(MainActivity.java:156)
ERROR15:11:30.77630066WindowManager at android.app.Dialog.show(Dialog.java:319)
ERROR15:11:30.77630066WindowManager at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
ERROR15:11:30.77630066WindowManager at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:299)
ERROR15:11:30.77630066WindowManager at android.view.ViewRootImpl.<init>(ViewRootImpl.java:372)
ERROR15:11:30.77630066WindowManagerandroid.view.WindowLeaked: Activity mobi.com.myapplication.MainActivity has leaked window com.android.internal.policy.PhoneWindow$DecorView{99e84fc V.E...... R....... 0,0-1152,523} that was originally added here报错信息中的
(MainActivity.java:92)
(MainActivity.java:128)
(MainActivity.java:156)
分别指的是39、73、100行
runOnUiThread(new Runnable() {
@Override
public void run() {
int status = responseEntity.getStatus();
if (FastHttp.result_ok == 0) {
int key = responseEntity.getKey();
if (key == Constants.InternetConfig.KEY0X01) {//检查更新接口
String result = responseEntity.getContentAsString();
parsingJsonSelectVersion(this, result); // TODO: 2017/10/17
}
} else if (FastHttp.result_net_err == status) {
Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
}
}
});