You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中通过Chaquopy接收Python返回的对象类型数据

问题根源与修复方案

1 切片范围错误

Python列表切片为左闭右开规则,你当前代码写的sim_scores = sim_scores[1:5]只会取排序后第2到第5位共4个结果,若要返回5部推荐电影,需要将切片修改为:

sim_scores = sim_scores[1:6]

2 返回值类型适配问题

你当前Python函数返回的是pandas Series对象,Chaquopy对pandas自定义对象的序列化支持不完善,直接调用toString()会出现内容截断,仅显示第一条数据。你需要将返回值转换为Python原生列表,修改Python函数的返回逻辑:

# 原返回代码
# return  recommendation
# 修改为
return recommendation.values.tolist()

3 Android侧代码适配

不要直接对返回的PyObject调用toString,改为遍历列表元素拼接成展示文本,修改Java点击逻辑:

bttn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        PyObject pyo = pyobj.getModule("main");
        PyObject obj = pyo.callAttr("get_recomendations",IN1.getText().toString());
        StringBuilder resultBuilder = new StringBuilder();
        // 遍历Python返回的列表所有元素
        for (int i = 0; i < obj.len(); i++) {
            resultBuilder.append(i+1)
                    .append(". ")
                    .append(obj.get(i).toString())
                    .append("\n");
        }
        textView.setText(resultBuilder.toString());
    }
});

可选验证步骤

你可以在Python函数中加入打印逻辑,确认Python侧返回的推荐结果数量符合预期,排除推荐算法本身计算结果不足的问题:

def get_recomendations(title, cosine_sim=cosine_sim):
    idx = indices[title]
    sim_scores = list(enumerate(cosine_sim[idx]))
    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
    sim_scores = sim_scores[1:6]
    movie_indices = [i[0] for i in sim_scores]
    recommendation = df2['title_x'].iloc[movie_indices]
    # 调试打印,可在Logcat中查看输出
    print("推荐结果数量:", len(recommendation))
    return recommendation.values.tolist()

内容的提问来源于stack exchange,提问作者Muhammad Hanif bin Samsudin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:36:00