Нулевой указатель при использовании библиотеки Zebra в еще существующем проекте

#android #barcode-scanner

#Android #сканер штрих-кода

Вопрос:

На самом деле я пытаюсь внедрить библиотеку zebra EMDK в свой еще существующий проект. Я шаг за шагом следовал следующему руководству, и в новом проекте все работало отлично, но когда я попытался использовать библиотеку в своем проекте, я получил следующую ошибку:

 2019-03-13 15:24:55.720 4671-4678/it.gabtamagnini.realco E/art: Failed sending reply to debugger: Broken pipe
2019-03-13 15:25:01.239 4671-4671/it.gabtamagnini.realco E/AndroidRuntime: FATAL EXCEPTION: main
    Process: it.gabtamagnini.realco, PID: 4671
    java.lang.RuntimeException: Unable to start activity ComponentInfo{it.gabtamagnini.realco/it.gabtamagnini.realco.InventarioActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.contentEquals(java.lang.CharSequence)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2666)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6123)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.contentEquals(java.lang.CharSequence)' on a null object reference
        at it.gabtamagnini.realco.InventarioActivity.handleDecodeData(InventarioActivity.java:1160)
        at it.gabtamagnini.realco.InventarioActivity.onCreate(InventarioActivity.java:129)
        at android.app.Activity.performCreate(Activity.java:6723)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6123) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779 

Код, в котором я получаю нулевой указатель:

   private void handleDecodeData(Intent i) {
        //Check the intent action is for us
        if (i.getAction().contentEquals("com.symbol.emdksample.RECVR")) {
            //Get the source of the data
            String source = i.getStringExtra("com.motorolasolutions.emdk.datawedge.source");

            //Check if the data has come from the Barcode scanner
            if (source.equalsIgnoreCase("scanner")) {
                //Get the data from the intent
                String data = i.getStringExtra("com.motorolasolutions.emdk.datawedge.data_string");

                //Check that we have received data
                if(data != null amp;amp; data.length() > 0)
                {
                    Toast.makeText(InventarioActivity.this,data,Toast.LENGTH_LONG).show();
                }
            }
        }
    }
  

Ответ №1:

это руководство довольно старое — профили сбора данных недавно устарели. Если вы пытаетесь это сделать на более новом устройстве, то я подозреваю, что com.motorolasolutions… Намерения были удалены, поскольку дополнительной строкой в течение некоторого времени была ‘com.symbol.datawedge.data_string.data_string. Я предлагаю прочитать https://developer.zebra.com/community/home/blog/2018/06/03/moving-from-the-emdk-data-capture-profile-to-datawedge это объясняет, что произошло с профилем сбора данных, но если вы ищете известный рабочий образец, то http://www.darryncampbell.co.uk/2017/12/13/tutorial-scan-with-datawedge-intent-output-on-zebra-devices/ должно быть хорошей отправной точкой.

Для наглядности я работаю на Zebra

Комментарии:

1. То есть простым словом EMDK устарел? В качестве устройств у меня здесь TC20, TC200J и MC330M. Можно ли каким-либо образом использовать конфигурацию профиля в DataWedge из EMDK для настройки штрих-кодов, которые должен считывать сканер?

2. На самом деле это работало некоторое время, но после какого-то другого теста эта трансляция намерений просто перестала работать.

3. Привет, нет, извините за путаницу, но EMDK НЕ устарел, только тот аспект EMDK, который позволяет настраивать DataWedge. Обычно вы используете EMDK или DataWedge для управления сканером и получения данных штрих-кода в свое приложение, и если вы используете DataWedge, вы можете настроить его, используя стандартные настройки Android, т. Е. нет необходимости использовать EMDK.