我试图使用本机模块上的反应本机从android获取设备名称和软件包安装程序,但我总是得到一个空值?
我的代码如下
结果总是null!
// DeviceInfoModule.java
package com.example;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactMethod;
import android.annotation.SuppressLint;
import android.os.Build;
import android.content.Context;
import android.os.AsyncTask;
public class DeviceInfoModule extends ReactContextBaseJavaModule {
public DeviceInfoModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "DeviceInfoModule";
}
@ReactMethod
public void getDeviceName(final Callback callback) {
getDeviceNameHandler(callback);
}
@ReactMethod
public void getDeviceInstaller(final Callback callback) {
getDevicePackager(callback);
}
private void getDeviceNameHandler(final Callback callback) {
@SuppressLint("StaticFieldLeak") AsyncTask<Void,Void,Void> myAsyncTask = new AsyncTask<Void,Void,Void>() {
@SuppressLint("StaticFieldLeak")
@Override
protected Void doInBackground(final Void ... params) {
String device_Name = Build.MANUFACTURER + "-" + Build.MODEL;
callback.invoke( device_Name, device_Name);
return null;
}
};
myAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
private void getDevicePackager(final Callback callback) {
@SuppressLint("StaticFieldLeak") AsyncTask<Void,Void,Void> myAsyncTask = new AsyncTask<Void,Void,Void>() {
@Override
protected Void doInBackground(final Void ... params) {
Context context = getReactApplicationContext();
String installer = context.getPackageManager().getInstallerPackageName(context.getPackageName());
callback.invoke(null, installer);
return null;
}
};
myAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
和包是:
// ReactNativePackages.java
package com.example;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.carexs.DeviceInfoModule;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ReactNativePackages implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new DeviceInfoModule(reactContext));
return modules;
}
}
在Main Application类中,我添加了包
protected List<ReactPackage> getPackages() {
List<ReactPackage> packages = new PackageList(this).getPackages();
packages.add(new CxsNativeUtilsPackage());
packages.add(new ReactNativePackages());
return packages;
}
在我的应用程序中,我有以下代码
const DeviceInfo = NativeModules.DeviceInfoModule;
DeviceInfo.getDeviceInstaller((err: string, name: string) => {
if (err) {
console.log('error', err);
} else {
console.log('device name', name);
}
});
有什么帮助吗,非常感谢。
我发现了一个解决方案,也许有一天有人会需要它,我发现我创建的反应本机方法不起作用,也许是因为一些废弃的模块或代码上的其他问题,我不确定,我已经将这些方法更改为新版本,例如:
@ReactMethod
getDevicePackager() // (renamed to getDeviceInstaller()) method in DeviceInfoModule is changed to the following
// will be
@ReactMethod(isBlockingSynchronousMethod = true)
public String getInstallerPackageNameSync() {
String packageName = getReactApplicationContext().getPackageName();
String installerPackageName = getReactApplicationContext().getPackageManager().getInstallerPackageName(packageName);
if (installerPackageName == null) {
return "unknown";
}
return installerPackageName;
}
@ReactMethod
public void getDeviceInstaller(Promise p) { p.resolve(getInstallerPackageNameSync()); }
为什么我总是得到这个错误? 表格: 要创建的链接
我正在练习使用Array.From函数。我想我应该得到一个答案,它是div的textContent,但我得到的是未定义的。为什么? null null
问题内容: 在.NET Framework 的参考中,使用type 声明请求类型。 在RFC 2616 中,声明了所有HTTP请求方法(例如POST,GET,PUT,DELETE …)。 .NET 和类中也存在类似的行为。 Java在方法上有类似的方法。 这些语言设计者为什么不考虑为这些HTTP方法实现枚举? 你有好主意吗? 问题答案: RFC 2616 链接的第一句话(添加了重点): HTTP
Okey,我盯着这两段代码看了很久,弄不清为什么会收到这个错误:typeerror:getsockaddrarg:AF_INET地址必须是tuple,而不是str。
我与Wildfly和OpenJPA合作。我有一个乐观锁例外的情况。 我得到的错误消息是: 00:08:29373警告[com.arjuna.ats.arjuna](默认任务-39)arjuna01225:TwoPhaseCoordinator。beforeCompletion-SynchronizationImple失败 :org.apache.openjpa.persistence.乐观锁定异常
问题内容: 如何拆分字符串并获取NULL值而不是空字符串。 我特别感兴趣的两个方法和。我希望这个查询: 将返回第三行而不是空字符串。有没有简单的方法可以做到这一点,即使用特殊字符?我的意思是: 我希望我可以使用方法从字符串中提取NULL : 从这里获取的代码:https : //sqlperformance.com/2016/03/t-sql-queries/string- split 问题答案: