#android #inflate-exception
#Android #раздувать-исключение
Вопрос:
Я создал приложение, которое отлично работает на моем планшете, но останавливается на моем samsung galaxy ace. Когда я запускаю LogCat, я получаю следующий журнал.
Я буду признателен за любую помощь.
I/DefContainer(6430): Скопировано / mnt/ sdcard/apps/ketekambioFull.apk в /mnt/asec/smdl2tmp1/pkg.apk D/MountService( 1492): :::: Переименовываемый контейнер :: path = /mnt/sdcard, oldId = smdl2tmp1, newId = com.mydom.mypackage-1 D/ VoldCmdListener(1319): asec переименовать smdl2tmp1 com.mydom.mypackage-1 D /MountService( 1492): :::: isecurecontainermounted :: path = /mnt/sdcard, id = com.mydom.mypackage-1 W / PackageManager(1492): монтажный контейнер com.mydom.mypackage-1 D/MountService( 1492): :::: mountSecureContainer :: path = /mnt/sdcard, id = com.mydom.mypackage-1, ownerUid = 1000 D/ VoldCmdListener(1319): asec монтировать com.mydom.mypackage-1 {} 1000 D/ Vold (1319): Fat::doMount монтировать(/dev/block/dm-2, /mnt/asec/com.mydom.mypackage-1,vfat,0x00200087,utf8,uid=1000,gid=0,fmask=222,dmask=222,shortname=mixed) Я/ PackageManager(1492): успешно переименовал smdl2tmp1 в com.mydom.mypackage-1 по новому пути: /mnt/asec/com.mydom.mypackage-1 D/MountService( 1492): :::: getSecureContainerPath :: path = /mnt/sdcard, id = com.mydom.mypackage-1 D/VoldCmdListener(1319): asec-путь com.mydom.mypackage-1 D /MountService( 1492): :::: isecurecontainermounted :: path = /mnt/sdcard, id = com.mydom.mypackage-1 I / Z7BroadcastReceiver( 4649): запуск onReceive(), намерение: намерение { act=android.intent.action .PACKAGE_ADDED dat=package:com.mydom.mypackage flg=0x10000000 cmp=com.seven.Z7/.service .Z7BroadcastReceiver (имеет дополнительные возможности) } D / Launcher.SWidgetPkgMgr(1585): addPackage=com.mydom.mypackage V/PackageIntentReceiver(4603): onReceive() намерение: Намерение { act=android.intent.action.PACKAGE_ADDED dat=package:com.mydom.mypackage flg=0x10000000 cmp=com.sec.android.app.controlpanel/ .PackageIntentReceiver (имеет дополнительные возможности) } pkg: действие com.mydom.mypackage:android.intent.action.PACKAGE_ADDED Я/ ActivityManager(1492): запускаю процесс com.mydom.mypackage для действия com.mydom.mypackage/.SplashScreenActivity: pid= 6501 uid= 10080 gids={} W / ActivityManager(1492): попытка запустить com.mydom.mypackage/.ActivityJuego D/dalvikvm(6501): VFY: мертвый код 0x001b-001c в Lcom/corral/keteKambio/ActivityJuego;.getDisplayWidth (Landroid / content / Context;) Я D/dalvikvm(6501): VFY: мертвый код 0x002e-0034 в Lcom /corral/keteKambio/Visor;. (Landroid / content / Context;)V D/dalvikvm(6501): VFY: мертвый код 0x002e-0034 в Lcom /corral/keteKambio/Visor;. (Landroid/content/Context; Landroid/util/AttributeSet;)V D/dalvikvm(6501): VFY: мертвый код 0x002e-0034 в Lcom /corral/keteKambio/Visor;. (Landroid/content /Context; Landroid/util/AttributeSet;I)V E/ AndroidRuntime(6501): java.lang.RuntimeException: не удается запустить activity ComponentInfo{com.mydom.mypackage/com.mydom.mypackage .ActivityJuego}: android.view.Исключение InflateException: строка двоичного файла XML # 69: ошибка при раздувании класса com.mydom.mypackage.Visor E / AndroidRuntime(6501): вызвано: android.view.Исключение InflateException: строка двоичного файла XML # 69: ошибка при раздувании класса com.mydom.mypackage.Visor E / AndroidRuntime(6501): в com.mydom.mypackage.ActivityJuego.onCreate(ActivityJuego.java: 101) E / AndroidRuntime(6501): в com.mydom.mypackage.Visor.(Visor.java: 87) W / ActivityManager(1492): Принудительное завершение действия com.mydom.mypackage/.ActivityJuego W / ActivityManager(1492): Тайм-аут приостановки активности для HistoryRecord{40849d30 com.mydom.mypackage/.ActivityJuego} D/VoldCmdListener( 1319): CommandListener::AsecCmd::runCommand -> com.mydom.mypackage-1 E/InputDispatcher(1492): канал '407a6fa8 com.mydom.mypackage/com.mydom.mypackage.SplashScreenActivity (сервер)' ~ Потребитель закрыл входной канал или произошла ошибка. события = 0x8 E/InputDispatcher(1492): канал '407a6fa8 com.mydom.mypackage/com.mydom.mypackage.SplashScreenActivity (сервер)' ~ Канал неисправимо поврежден и будет удален! I/ WindowManager(1492): ВЫИГРАТЬ СМЕРТЬ: Окно {407a6fa8 com.mydom.mypackage/com.mydom.mypackage.Приостановлено действие SplashScreenActivity = true} W / ActivityManager(1492): Тайм-аут уничтожения активности для HistoryRecord{40ab1d68 com.mydom.mypackage/.SplashScreenActivity} W / ActivityManager(1492): Тайм-аут уничтожения активности для HistoryRecord{40849d30 com.mydom.mypackage/.ActivityJuego}
Я не понимаю, почему это работает на моем планшете, но не на моем телефоне samsung galaxy ace. Я выделил то, что я понимаю, читая другие относительные ссылки.
В журнале указано, что строка #69 в моем XML вызывает исключение inflateException. Я показываю этот файл следующим. Кажется, что проблема заключается в раздувании класса Visor, который является SurfaceView. Я также получаю VFY: мертвый код 0x001b-001c, и я не знаю, какая из них является основной ошибкой. VFY: мертвый код или исключение InflateException?.
ActivityJuego.xml:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/TableLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:stretchColumns="3"
tools:context=".MainActivity" >
...
...
...
...
<LinearLayout
android:id="@ id/LinearLayoutVistaCliente"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/borde"
android:padding="1dp"
android:paddingLeft="1dp"
android:paddingTop="1dp"
android:paddingRight="1dp"
android:paddingBottom="1dp">
<com.mydom.mypackage.Visor
android:id="@ id/visorCliente"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.0" />
</LinearLayout>
...
...
...
...
</TableLayout>
ActivityJuego.java
package com.mydom.mypackage;
public class ActivityJuego extends Activity {
public static int nivel = 1;
private Visor visorCliente;
private Visor visorCaja;
private static Typeface myTypeface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getDisplayWidth(this) <= 720) {
smallScreen = true;
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
setContentView(R.layout.activity_juego);
visorCliente = (Visor) findViewById(R.id.visorCliente);
visorCaja = (Visor) findViewById(R.id.visorCaja);
myTypeface = Typeface.createFromAsset(this.getAssets(), "LCD.ttf");
}
...
...
...
...
}
и, наконец,,
Visor.java
package com.mydom.mypackage;
public class Visor extends SurfaceView implements SurfaceHolder.Callback {
BitmapFactory.Options opts = new BitmapFactory.Options();
...
...
...
public Visor(Context context) {
super(context);
getHolder().addCallback(this);
opts.inMutable=true;
}
public Visor(Context context, AttributeSet attrs) {
super(context, attrs);
getHolder().addCallback(this);
opts.inMutable=true;
}
public Visor(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
getHolder().addCallback(this);
opts.inMutable=true;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
if (caja != null) {
draw(caja, canvas);
}
}
...
...
...
...
}
Заранее большое спасибо.
Комментарии:
1. Где находится getDisplayWidth()?
2. Что такое
getHolder()
?3. getDisplayWidth находится в классе ActivityJuego, внутри метода onCreate.
Ответ №1:
Исключение возникает, когда макет раздувается во время конструктора для Visor
.
Из опубликованного кода наиболее вероятным объяснением является то, что getHolder()
там возвращается значение null.