Pyjnius 自定义 Java 方法在公共静态后返回'JavaException: Unable to find a None Method'工作



所以我需要从Android中的InputStream中读取一个ByteArray。 因此,我在 java 中使用 pyjnius 的 kivy 应用程序中使用此自定义方法,原因与链接中所述的原因相同。

我将 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: Unable to find a None Method

经过很多很多天的斗争,我终于通过简单地将该方法声明为:public static新的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;
}
}



我想知道的是,为什么"静态"这个词会让java方法突然起作用?

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

Reading.inputread(...)

仅当您在 Java 中将方法输入读取定义为静态时,这才有效。

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

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

相关内容

最新更新