VFY: мертвый код 0x001b-001c getDisplayWidth и android.view.Раздувать исключение

#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.