Pyjnius自定义java方法返回';JavaException:找不到None方法';公众休息室后的工作
所以我需要在Android中从InputStream读取ByteArray。因此,我在一个使用pyjnius的kivy应用程序的java中使用了它,原因与链接中所述的相同Pyjnius自定义java方法返回';JavaException:找不到None方法';公众休息室后的工作,java,python,android,kivy,pyjnius,Java,Python,Android,Kivy,Pyjnius,所以我需要在Android中从InputStream读取ByteArray。因此,我在一个使用pyjnius的kivy应用程序的java中使用了它,原因与链接中所述的相同 我将ReadInput.java文件放在以下目录中: ~/Build\u Environ/.buildozer/android/platform/Build/dists/JniusPrintBluetoothAppie/src/main/java/org/kivy/android 我用pyjnius初始化了java类: Re
我将ReadInput.java文件放在以下目录中:
~/Build\u 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 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;
}
}
我想知道的是为什么“static”一词会让java方法突然工作?原因是在Python代码中,您以静态方式访问该方法:
Reading = autoclass('org.kivy.android.ReadInput')
reading = Reading()
reading.inputread(...)
只有在Java中将方法inputread定义为static时,这才有效
但这是没有必要的。最好在Java中将该方法保持为非静态,并在Python中以正常的非静态方式使用它:
Reading = autoclass('org.kivy.android.ReadInput')
reading = Reading()
reading.inputread(...)
显示您的代码。@mentalurg我添加了更多的代码对不起,我对java不是很精通(仍在学习很多),但是Reading()和Reading不是两个类对象吗?这意味着inputread方法属于该类。您能告诉我这两个变量之间的区别吗?或者访问该方法的两种方式有何不同?通过调用Reading(),您可以创建该类的新实例(或对象,如果您愿意)。当您有一个实例时,您可以调用实例方法。好的,静态地说,您不需要类的对象或实例来访问该方法。非静态地,您需要类的对象或实例来访问这些方法。谢谢,我确实学到了一些东西。