You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动