gpt4 book ai didi

java - Pyjnius 自定义 java 方法返回 'JavaException: Unable to find a None Method' 在 Public Static 之后工作

转载 作者:行者123 更新时间:2023-11-29 22:36:03 32 4
gpt4 key购买 nike

所以我需要从 Android 中的 InputStream 中读取一个 ByteArray。因此我用了这个 custom method出于与链接中所述相同的原因,在使用 pyjnius 的 kivy 应用程序中的 java 中。

我将 ReadInput.java 文件放在这个目录中:
~/Build_Environ/.buildozer/android/platform/build/dists/JniusPrintBluetoothAppie/src/main/java/org/kivy/android

我用 pyjnius 初始化了 java 类:

Reading = autoclass('org.kivy.android.ReadInput')

java代码:

package org.kivy.android;

import java.io.InputStream;
import java.lang.Byte;
import java.lang.Integer;
import java.io.IOException;

public class ReadInput {
public byte[] inputread(InputStream stream, int count) throws IOException {
byte[] by = new byte[count];
stream.read(by);
return by;
}
}


我使用以下代码从 python 中的缓冲区中读取:

Reading.inputread(self.recv_stream, 4) #recv_stream is an Android BluetoothAdapter createInsecureRfcommSocketToServiceRecord getInputStream object

但出于某种原因,上面的代码不断给我以下错误:
JavaException:无法找到 None 方法

经过许多天的努力,我终于通过简单地将方法声明为:公共(public)静态新的 java 方法如下所示,我用与上面相同的方式调用它:

package org.kivy.android;

import java.io.InputStream;
import java.lang.Byte;
import java.lang.Integer;
import java.io.IOException;

public class ReadInput {
public static byte[] inputread(InputStream stream, int count) throws IOException {
byte[] by = new byte[count];
stream.read(by);
return by;
}
}



我想知道的是为什么“static”这个词会使 java 方法突然起作用?

最佳答案

原因是在 Python 代码中,您以静态方式访问该方法:

Reading.inputread(...)

只有当您在 Java 中将方法 inputread 定义为 static 时,这才会起作用。

但没有必要。最好在 Java 中将该方法保持为非静态,并以正常的非静态方式在 Python 中使用它:

Reading = autoclass('org.kivy.android.ReadInput')
reading = Reading()
reading.inputread(...)

关于java - Pyjnius 自定义 java 方法返回 'JavaException: Unable to find a None Method' 在 Public Static 之后工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59498889/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com