簡體   English   中英

Pyjnius 自定義 Java 方法返回“JavaException:無法找到無方法”在公共靜態之后有效

[英]Pyjnius custom java method returning 'JavaException: Unable to find a None Method' works after Public Static

所以我需要從 Android 的 InputStream 中讀取一個 ByteArray。 因此,出於與鏈接中所述相同的原因,我在使用 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: 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 中的inputread方法定義為static 時,這才有效

但這沒有必要。 最好在 Java 中將該方法保持為非靜態,並以正常的非靜態方式在 Python 中使用它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM