java - 从另一个类调用非静态方法
问题描述
请原谅凌乱的代码,我正在学习如何编辑模板应用程序。有很多代码没有做任何事情。
基本上,我试图将一个名为 sBuffer 的字符串移动到 Activity 类中,以在文本视图中的屏幕上显示数据。该函数在我的 TemplateManager 中被调用。
我已经被这个问题困扰了很长一段时间,非常感谢您的帮助。
我不知道如何调用我在 TemplateManager 中 TemplateDataCallback 中的 onDataReceived 函数而不使我的 onDataReceived 静态。当它是静态的时,我不能使用意图来移动数据。
尝试了昆仑的添加 (new TemplateDataCallback()).onDataReceived(device, data);
它在数据进入时编译、安装、运行并崩溃。通知已成功启用 2020-07-16 09:58:40.591 20526-20539/no.nordicsemi.android.nrftoolbox D/BluetoothGatt: onConnectionUpdated() - Device=FE:C3 :7B:D6:A0:27 间隔=39 延迟=0 超时=500 状态=0 2020-07-16 09:58:40.591 20526-20539/no.nordicsemi.android.nrftoolbox I/BleManager:连接参数更新(间隔:48.75ms,延迟:0,超时:5000ms)2020-07-16 09:58:41.699 20526-20539/no.nordicsemi.android.nrftoolbox I/BleManager:从 6e400003-b5a3-f393-e0a9-e50e24dcca9e 收到通知,值:(0x) 64-66-67-0D 2020-07-16 09:58:41.704 20526-20526/no.nordicsemi.android.nrftoolbox D/ascii: onDataReceived:dfg 2020-07-16 09:58:41.705 20526-20526/no.nordicsemi.android.nrftoolbox D/AndroidRuntime:关闭 VM 2020-07-16 09:58:41.709 20526-20526/no.nordicsemi。android.nrftoolbox E/AndroidRuntime:致命异常:主进程:no.nordicsemi.android.nrftoolbox,PID:20526 java.lang.NullPointerException:尝试调用虚拟方法'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread ()' 在 android.app.Activity.startActivityForResult(Activity) 的 android.app.Activity.startActivityForResult(Activity.java:4697) 的空对象引用.java:4654) 在 androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662) 在 android.app.Activity.startActivity(Activity.java:5015) 在 android.app.Activity.startActivity(Activity.java: 4983) 在 no.nordicsemi.android.nrftoolbox.template.callback.TemplateDataCallback.onDataReceived(TemplateDataCallback.java:42) 在 no.nordicsemi.android.nrftoolbox.template.TemplateManager$TemplateManagerGattCallback.lambda$initialize$3(TemplateManager.java:84) 在 no.nordicsemi.android.nrftoolbox.template.-$$Lambda$TemplateManager$TemplateManagerGattCallback$AaM3yOzPmG7Maq2q- 1Ltp4MIo4Q.onDataReceived(Unknown Source:0) at no.nordicsemi.android.ble.ValueChangedCallback.lambda$notifyValueChanged$0(ValueChangedCallback.java:147) 在 no.nordicsemi.android.ble.-$$Lambda$ValueChangedCallback$4rcq0bbOhcTVqpLmftoy8pUEJ-Q .run(Unknown Source:6) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java :214) 在 android.app.ActivityThread.main(ActivityThread.java:7156) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975) 2020-07-16 09:58:45.688 20526-20539/no.nordicsemi.android.nrftoolbox D/BluetoothGatt: onConnectionUpdated( ) - 设备=FE:C3:7B:D6:A0:27 间隔=60 延迟=0 超时=400 状态=0 2020-07-16 09:58:45.688 20526-20539/no.nordicsemi.android.nrftoolbox I/ BleManager:连接参数更新(间隔:75.0ms,延迟:0,超时:4000ms)
==================================================== =======================================
这是我正在捕获数据的课程。
公共抽象类 TemplateDataCallback 扩展 AppCompatActivity {
public static String sBuffer;
private static String bstr;
private static String MainString;
public static String ascii;
public void onDataReceived(@NonNull final BluetoothDevice device, @NonNull final Data data) {
bstr = new String (String.valueOf(data));
int istr = bstr.length();
MainString = bstr.substring(5,istr); // split string into hex
String dashless = MainString.replaceAll("\\-",""); // remove dashes
ascii = "";
for (int i = 0; i < dashless.length(); i += 2) {
String part = dashless.substring(i, i + 2); // extract two characters from hex string
char ch = (char)Integer.parseInt(part, 16); // change it into base 16 and typecast as the character
ascii = ascii + ch; // add this char to final ASCII string
}
Log.d("ascii", "onDataReceived:"+ascii);
sBuffer = ascii;
Intent intent = new Intent(TemplateDataCallback.this, TemplateActivity.class);
intent.putExtra("DATA",sBuffer);
startActivity(intent);
}
}
这是我出错的部分,无法调用我的 onDataReceived 函数。** 指出的错误,消息是“无法从静态上下文引用非静态方法 'onDataReceived(android.bluetooth.BluetoothDevice, no.nordicsemi.android.ble.data.Data)'”
公共类 TemplateManager 扩展 BatteryManager {
static final UUID SERVICE_UUID = UUID.fromString("6E400001-B5A3-F393-E0A9-E50E24DCCA9E"); // UART Service ID
private static final UUID MEASUREMENT_CHARACTERISTIC_UUID = UUID.fromString("6E400003-B5A3-F393-E0A9-E50E24DCCA9E"); // UART TX Service
private static final UUID READABLE_CHARACTERISTIC_UUID = UUID.fromString("00002A38-0000-1000-8000-00805f9b34fb"); // Body Sensor Location
private static final UUID OTHER_SERVICE_UUID = UUID.fromString("00001800-0000-1000-8000-00805f9b34fb"); // Generic Access service
private static final UUID WRITABLE_CHARACTERISTIC_UUID = UUID.fromString("00002A00-0000-1000-8000-00805f9b34fb"); // Device Name
private BluetoothGattCharacteristic requiredCharacteristic, deviceNameCharacteristic, optionalCharacteristic;
public String sBuffer;
public TemplateManager(final Context context) {
super(context);
}
@NonNull
@Override
protected BatteryManagerGattCallback getGattCallback() {
return new TemplateManagerGattCallback();
}
private class TemplateManagerGattCallback extends BatteryManagerGattCallback {
@Override
protected void initialize() {
super.initialize();
requestMtu(260)
.with((device, mtu) -> log(LogContract.Log.Level.APPLICATION, "MTU changed to " + mtu))
.done(device -> {
})
.fail((device, status) -> log(Log.WARN, "MTU change not supported"))
.enqueue();
setNotificationCallback(requiredCharacteristic)
.with((device, data) -> {
TemplateDataCallback.**onDataReceived**(device, data); // ERROR onDataRecived
});
enableNotifications(requiredCharacteristic)
.with((device, data) -> log(Log.DEBUG, "Data sent: " + data))
.done(device -> log(LogContract.Log.Level.APPLICATION, "Notifications enabled successfully"))
.fail((device, status) -> log(Log.WARN, "Failed to enable notifications"))
.enqueue();
}
==================================================== =======================================
解决方案
推荐阅读
- react-native - 错误:运行 `yarn run install-pods` 时产生 pod ENOENT
- angular - 使用 ng serve 在 Angular 中发生未处理的异常
- knockout.js - 仅在带有淘汰赛的特定页面上显示按钮
- python - Appium 错误:appium-python 脚本无法连接到应用程序,而 Appium Desktop 可以
- javascript - 为什么我的控制器中的变量为空?
- javascript - Making commands case insensitive [Discord bot] in JS
- javascript - Vim Prettier 插件导致以 .js 扩展名结尾的文件出现错误
- javascript - 将带值的参数传递给函数不能按预期工作
- android - ViewModel 更新屏幕旋转
- python - 数据流作业停止随机处理数据