如何在Android中从Chaquopy Python函数获取返回值(非对象)
在Android中使用Chaquopy调用Python函数无法获取返回数值的解决方案
我刚接触Java,尝试在Android应用中用Chaquopy运行Python脚本时遇到了一个问题:调用Python函数后它确实返回了一个数值,但我没办法在Android代码里把这个值提取出来。我翻遍了PyObject的方法,都没找到获取df['y'][1]这个结果的方式。
我的代码示例
Python函数(getAssetValue.py)
def realtime(user_input): # Libraries import datetime import requests import pandas as pd import numpy as np import pandas_datareader as web # Get the data currentDT = datetime.datetime.now() end=str(currentDT.year)+'-'+str(currentDT.month)+'-'+str(currentDT.day) start=str(currentDT.year)+'-'+str(currentDT.month-1)+'-'+str(currentDT.day) df = web.DataReader(str(user_input), data_source='yahoo',start=start,end=end) df = pd.DataFrame(data=df['Close']) df.columns=['y'] df['ds']=df.index return(df['y'][1])
Java调用代码
public int getrtasset() { Python py = Python.getInstance(); PyObject pyfile = py.getModule("getAssetValue"); PyObject va = pyfile.callAttr("realtime", getMtitulo()); return va; }
这里getAssetValue是我的Python脚本文件名,我需要拿到Python函数返回的数值,但不知道怎么从PyObject va里提取它。
已解决的方案
其实这个返回值本质是double类型,直接使用Chaquopy提供的PyObject.toDouble()方法就能获取到对应的数值了。另外注意你的Java函数返回类型是int,如果Python返回的是带小数的数值,可能需要调整返回类型或者做类型转换,修改后的Java代码可以是这样:
public double getrtasset() { Python py = Python.getInstance(); PyObject pyfile = py.getModule("getAssetValue"); PyObject va = pyfile.callAttr("realtime", getMtitulo()); return va.toDouble(); }
如果确实需要返回int类型,也可以在获取double后做强制转换:return (int) va.toDouble();,不过要注意精度丢失的问题。
内容的提问来源于stack exchange,提问作者Jesús de la Fuente Cedeño




