Pyjnius 自定义 java 方法返回 'JavaException: Unable to find a None Method' 在 Public 静态之后工作
Pyjnius custom java method returning 'JavaException: Unable to find a None Method' works after Public Static
所以我需要从 Android 中的 InputStream 中读取一个 ByteArray。因此,出于与 link 中所述相同的原因,我在使用 pyjnius 的 kivy 应用程序中的 java 中使用了这个 custom method。
我将 ReadInput.java 文件放在这个目录中:
~/Build_Environ/.buildozer/android/platform/build/dists/JniusPrintBluetoothAppie/src/main/java/org/kivy/android
我用 pyjnius 初始化了 java class:
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;
}
}
我想知道的是为什么'static'这个词会突然让java方法起作用?
原因是在 Python 代码中,您以 static 方式访问该方法:
Reading.inputread(...)
仅当您将 Java 中的 inputread 方法定义为 static.
时,此方法才有效
但没有必要。最好在 Java 中将方法保持为非静态,并以正常的非静态方式在 Python 中使用它:
Reading = autoclass('org.kivy.android.ReadInput')
reading = Reading()
reading.inputread(...)
所以我需要从 Android 中的 InputStream 中读取一个 ByteArray。因此,出于与 link 中所述相同的原因,我在使用 pyjnius 的 kivy 应用程序中的 java 中使用了这个 custom method。
我将 ReadInput.java 文件放在这个目录中:
~/Build_Environ/.buildozer/android/platform/build/dists/JniusPrintBluetoothAppie/src/main/java/org/kivy/android
我用 pyjnius 初始化了 java class:
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;
}
}
我想知道的是为什么'static'这个词会突然让java方法起作用?
原因是在 Python 代码中,您以 static 方式访问该方法:
Reading.inputread(...)
仅当您将 Java 中的 inputread 方法定义为 static.
时,此方法才有效但没有必要。最好在 Java 中将方法保持为非静态,并以正常的非静态方式在 Python 中使用它:
Reading = autoclass('org.kivy.android.ReadInput')
reading = Reading()
reading.inputread(...)