Не удалось создать обработчик внутри потока, который не вызвал 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;
}
};
}
}