Я пытаюсь реализовать пример кода Google для wifi direct в Android, но он выдает мне исключение

#android #wifi-direct #wifip2p

#Android #wifi-direct #wifip2p

Вопрос:

Проект demowifi, приведенный здесь.

но когда я пытаюсь его реализовать, я получаю эту ошибку-

 FATAL EXCEPTION: main
                                                                         Process: microsoft.demo_wifidirect, PID: 3540
                                                                         java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.p2p.CONNECTION_STATE_CHANGE flg=0x24000010 (has extras) } in microsoft.demo_wifidirect.WiFiDirectBroadcastReceiver@41bad428
                                                                             at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:782)
                                                                             at android.os.Handler.handleCallback(Handler.java:733)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:146)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5641)
                                                                             at java.lang.reflect.Method.invokeNative(Native Method)
                                                                             at java.lang.reflect.Method.invoke(Method.java:515)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1288)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1104)
                                                                             at dalvik.system.NativeStart.main(Native Method)
                                                                          Caused by: java.lang.ClassCastException: microsoft.demo_wifidirect.DeviceListFragment cannot be cast to microsoft.demo_wifidirect.DeviceDetailFragment
                                                                             at microsoft.demo_wifidirect.WiFiDirectActivity.resetData(WiFiDirectActivity.java:101)
                                                                             at microsoft.demo_wifidirect.WiFiDirectBroadcastReceiver.onReceive(WiFiDirectBroadcastReceiver.java:101)
                                                                             at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:772)
                                                                             at android.os.Handler.handleCallback(Handler.java:733) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                             at android.os.Looper.loop(Looper.java:146) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5641) 
                                                                             at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                             at java.lang.reflect.Method.invoke(Method.java:515 

Пожалуйста, помогите мне понять, что пошло не так, поскольку я совершенно новичок в Android.

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

1. попробуйте эту ссылку для демонстрации: github.com/ahmontero/wifi-direct-demo

2. В WiFiDirectBroadcastReceiver вы выполняете приведение DeviceListFragment к DeviceDetailFragment , что вызывает ошибку

3. добавьте класс WiFiDirectBroadcastReceiver

4. Вы изменили название пакета. Везде ли что-то изменилось, особенно в AndroidManifest.xml ?

Ответ №1:

Для всех, у кого была эта проблема, это приведенное исключение выдавалось, потому что у меня были оба класса фрагментов, перечисленных как «DeviceDetailFragment»: ) Когда я исправил это и убедился, что один предназначен для DeviceDetailFragment, а другой — для DeviceDetailFragment, как показано ниже, все сработало нормально.

https://github.com/hiteshbpatel/Android_Blog_Projects/blob/master/WiFiShareFilesExampleAndroid/app/src/main/res/layout/activity_main.xml

Кроме того, спасибо Хитешу Пателю за то, что собрал быструю рабочую версию этой технологии на GitHub: https://github.com/hiteshbpatel

 <LinearLayout
    android:layout_width="match_parent"
    android:id="@ id/linearLayout"
    android:layout_height="0dp"
    android:orientation="vertical"
    android:layout_alignParentTop="true"
    android:layout_weight="0.9">
    <fragment
        class="com.example.shriyanshu.wifisharefilesexampleandroid.DeviceListFragment"
        android:id="@ id/fragment_list"
        android:layout_width="match_parent"
        android:layout_height="@dimen/phone_list_height"
        tools:layout="@layout/device_list">
    </fragment>

    <fragment
        class="com.example.shriyanshu.wifisharefilesexampleandroid.DeviceDetailFragment"
        android:id="@ id/fragment_detail"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout="@layout/device_detail">
    </fragment>
</LinearLayout>