У меня проблема
Я создал свой диалог прогресса
dialog = new ProgressDialog(InstallerActivity.this);
У меня есть 12 apk файлов в папке с активами.Я пытаюсь скопировать все 12 ресурсов на SDCard с помощью этой функции
private void CopyAssets() {
AssetManager assetManager = getAssets();
String[] files = null;
String[] files2 = null;
try {
files2 = assetManager.list("");
List<String> sb = new ArrayList();
for (String curfile : files2) {
if (curfile.endsWith("apk")) {
sb.add(curfile);
}
}
files = sb.toArray(new String[sb.size()]);
} catch (IOException e) {
Log.e("tag", e.getMessage());
}
dialog.setMax(files.length);
dialog.setProgress(0);
for(String filename : files) {
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(filename);
out = new FileOutputStream(externalPath + "/" + appsdir + "/" + filename);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
dialog.incrementProgressBy(1);
out = null;
} catch(Exception e) {
Log.e("tag", e.getMessage());
}
}
}
private void copyFile(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
Но мое приложение всегда вылетает на 10 файлах с ошибкой: окно просочилось.Если я удалю Log.e, он не рухнет, но все равно скопирует только 10 файлов, а не 12!
После поиска в Google я обнаружил, что мне нужно использовать dialog.dismiss()
, но я не хочу сейчас его закрывать, оннеобходим, чтобы показать прогресс еще 2 элементов!
Logcat:
11-19 18:22:13.473: D/dalvikvm(19931): GC_EXTERNAL_ALLOC freed 872 objects / 58552 bytes in 88ms
11-19 18:22:57.903: D/asset(19931): Data exceeds UNCOMPRESS_DATA_MAX (4412833 vs 3145728)
11-19 18:22:57.913: W/dalvikvm(19931): threadid=9: thread exiting with uncaught exception (group=0x4001d930)
11-19 18:22:57.943: E/AndroidRuntime(19931): FATAL EXCEPTION: Thread-10
11-19 18:22:57.943: E/AndroidRuntime(19931): java.lang.NullPointerException: println needs a message
11-19 18:22:57.943: E/AndroidRuntime(19931): at android.util.Log.println_native(Native Method)
11-19 18:22:57.943: E/AndroidRuntime(19931): at android.util.Log.e(Log.java:215)
11-19 18:22:57.943: E/AndroidRuntime(19931): at com.installer.InstallerActivity.CopyAssets(InstallerActivity.java:284)
11-19 18:22:57.943: E/AndroidRuntime(19931): at com.installer.InstallerActivity.access$1(InstallerActivity.java:246)
11-19 18:22:57.943: E/AndroidRuntime(19931): at com.installer.InstallerActivity$3$2.run(InstallerActivity.java:169)
11-19 18:22:57.943: E/AndroidRuntime(19931): at java.lang.Thread.run(Thread.java:1096)
11-19 18:22:58.883: E/WindowManager(19931): Activity com.installer.InstallerActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@460905c0 that was originally added here
11-19 18:22:58.883: E/WindowManager(19931): android.view.WindowLeaked: Activity com.installer.InstallerActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@460905c0 that was originally added here
11-19 18:22:58.883: E/WindowManager(19931): at android.view.ViewRoot.<init>(ViewRoot.java:247)
11-19 18:22:58.883: E/WindowManager(19931): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
11-19 18:22:58.883: E/WindowManager(19931): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
11-19 18:22:58.883: E/WindowManager(19931): at android.view.Window$LocalWindowManager.addView(Window.java:424)
11-19 18:22:58.883: E/WindowManager(19931): at android.app.Dialog.show(Dialog.java:241)
11-19 18:22:58.883: E/WindowManager(19931): at com.installer.InstallerActivity$3.onClick(InstallerActivity.java:123)
11-19 18:22:58.883: E/WindowManager(19931): at android.view.View.performClick(View.java:2449)
11-19 18:22:58.883: E/WindowManager(19931): at android.view.View$PerformClick.run(View.java:9027)
11-19 18:22:58.883: E/WindowManager(19931): at android.os.Handler.handleCallback(Handler.java:587)
11-19 18:22:58.883: E/WindowManager(19931): at android.os.Handler.dispatchMessage(Handler.java:92)
11-19 18:22:58.883: E/WindowManager(19931): at android.os.Looper.loop(Looper.java:123)
11-19 18:22:58.883: E/WindowManager(19931): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-19 18:22:58.883: E/WindowManager(19931): at java.lang.reflect.Method.invokeNative(Native Method)
11-19 18:22:58.883: E/WindowManager(19931): at java.lang.reflect.Method.invoke(Method.java:521)
11-19 18:22:58.883: E/WindowManager(19931): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-19 18:22:58.883: E/WindowManager(19931): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-19 18:22:58.883: E/WindowManager(19931): at dalvik.system.NativeStart.main(Native Method)
Редактировать: Похоже, что это не проблема progressdialog.Исправлена ошибка в строке log.e и получена новая ошибка:
11-19 19:17:39.533: E/tag(20559): Something went wrong while copying files
11-19 19:17:39.533: E/tag(20559): java.io.IOException
11-19 19:17:39.533: E/tag(20559): at android.content.res.AssetManager.readAsset(Native Method)
11-19 19:17:39.533: E/tag(20559): at android.content.res.AssetManager.access$700(AssetManager.java:36)
11-19 19:17:39.533: E/tag(20559): at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:571)
11-19 19:17:39.533: E/tag(20559): at com.installer.InstallerActivity.copyFile(InstallerActivity.java:292)
11-19 19:17:39.533: E/tag(20559): at com.installer.InstallerActivity.CopyAssets(InstallerActivity.java:276)
11-19 19:17:39.533: E/tag(20559): at com.installer.InstallerActivity.access$1(InstallerActivity.java:247)
11-19 19:17:39.533: E/tag(20559): at com.installer.InstallerActivity$3$2.run(InstallerActivity.java:170)
11-19 19:17:39.533: E/tag(20559): at java.lang.Thread.run(Thread.java:1096)
Почему он не может скопировать после 10-го элемента из ресурсов?
Спасибо