Не удалось создать обработчик внутри потока, который не вызвал Looper.prepare() NsdManager

(Я новичок в Android) Я работаю над приложением, чтобы преобразовать имя службы nodemcu (esp8266.local) в Ip. Я сталкивался с этими ошибками, я пробовал много способов исправить это. Пожалуйста, помогите мне заранее спасибо,

ссылка: http://www.dodgycoder.net/2015/02/setting-up-bonjourzeroconfmdnsnsd.html

Ошибка при попытке кода в Oplus2:

Не удается создать обработчик внутри потока, который не вызвал Looper.prepare()

тот же код пробовал в mi note4:

E / HAL: PATH3 /odm/lib64/hw/gralloc.qcom.so E / HAL: PATH2 /vendor/lib64/hw/gralloc.qcom.so E / HAL: PATH1 /system/lib64/hw/gralloc.qcom. поэтому E/HAL: PATH3 /odm/lib64/hw/gralloc.msm8953.so E/HAL: PATH2 /vendor/lib64/hw/gralloc.msm8953.so E/HAL: PATH1 /system/lib64/hw/gralloc.msm8953.так

public class MainActivity extends Activity {
    private NsdManager mNsdManager;
    private NsdManager.DiscoveryListener mDiscoveryListener;
    private NsdManager.ResolveListener mResolveListener;
    private NsdServiceInfo mServiceInfo;
    public String mRPiAddress;

    // The NSD service type that the RPi exposes.
    private static final String SERVICE_TYPE = "_workstation._tcp.";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRPiAddress = "";

    }
   public void run(View view){
        mNsdManager = (NsdManager)(getApplicationContext().getSystemService(Context.NSD_SERVICE));
        initializeResolveListener();
        initializeDiscoveryListener();
        mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
    }
    private void initializeDiscoveryListener() {

        // Instantiate a new DiscoveryListener
        mDiscoveryListener = new NsdManager.DiscoveryListener() {

            //  Called as soon as service discovery begins.
            @Override
            public void onDiscoveryStarted(String regType) {
                Log.d("NSD", "Started" );
            }

            @Override
            public void onServiceFound(NsdServiceInfo service) {
                // A service was found!  Do something with it.
                String name = service.getServiceName();
                String type = service.getServiceType();
                Log.d("NSD", "Service Name=" + name);
                Log.d("NSD", "Service Type=" + type);
                /*if (type.equals(SERVICE_TYPE) && name.contains("garagedoor")) {
                    Log.d("NSD", "Service Found @ '" + name + "'");
                    mNsdManager.resolveService(service, mResolveListener);
                }*/
            }

            @Override
            public void onServiceLost(NsdServiceInfo service) {
                Log.d("NSD", "Lost" );
                // When the network service is no longer available.
                // Internal bookkeeping code goes here.
            }

            @Override
            public void onDiscoveryStopped(String serviceType) {
                Log.d("NSD", "Discovery stopped" );
            }

            @Override
            public void onStartDiscoveryFailed(String serviceType, int errorCode) {
                mNsdManager.stopServiceDiscovery(this);
                Log.d("NSD", "Failed" );
            }

            @Override
            public void onStopDiscoveryFailed(String serviceType, int errorCode) {
                mNsdManager.stopServiceDiscovery(this);
            }
        };
    }

    private void initializeResolveListener() {
        mResolveListener = new NsdManager.ResolveListener() {

            @Override
            public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
                // Called when the resolve fails.  Use the error code to debug.
                Log.e("NSD", "Resolve failed" + errorCode);
            }

            @Override
            public void onServiceResolved(NsdServiceInfo serviceInfo) {
                mServiceInfo = serviceInfo;

                // Port is being returned as 9. Not needed.
                //int port = mServiceInfo.getPort();

                InetAddress host = mServiceInfo.getHost();
                String address = host.getHostAddress();
                Log.d("NSD", "Resolved address = " + address);
                mRPiAddress = address;
            }
        };
    }

}

0 ответов

Другие вопросы по тегам