Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pyjnius自定义java方法返回';JavaException:找不到None方法';公众休息室后的工作_Java_Python_Android_Kivy_Pyjnius - Fatal编程技术网

Pyjnius自定义java方法返回';JavaException:找不到None方法';公众休息室后的工作

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

所以我需要在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类:

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(),您可以创建该类的新实例(或对象,如果您愿意)。当您有一个实例时,您可以调用实例方法。好的,静态地说,您不需要类的对象或实例来访问该方法。非静态地,您需要类的对象或实例来访问这些方法。谢谢,我确实学到了一些东西。