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

如何在Android Studio中运行Hipster纯Java库实现Dijkstra算法?

解决Android Studio中Hipster库Dijkstra结果显示问题及室内导航替代方案

我来帮你梳理问题根源并给出修复方案,同时推荐几个适合商场室内导航的替代选择:

1. 错误原因拆解

你遇到的Cannot resolve method 'makeText(...)'报错,其实是两个小问题叠加导致的:

  • 参数类型不匹配:你调用search('L')时传的是字符类型char,但你的图节点都是字符串(比如"A"、"B"),Hipster的search方法要求参数和节点类型完全一致,这个类型不匹配会引发编译错误,进而导致后续的toString()调用也无法被正确识别。
  • Context初始化时机错误:你在Activity的成员变量位置直接调用getApplicationContext(),此时Activity还未完成初始化,上下文对象是null,这也会导致Toast的方法调用不合法。

2. 代码修复步骤

按照下面的调整修改你的代码,就能解决问题:

第一步:修正节点参数类型

把search('L')改成search("L"),和你定义的字符串节点类型保持一致。

第二步:正确获取Context

将Context的获取移到onCreate方法内部,直接用Find_Shortst_Path.this(或者简化的this)作为Toast的上下文参数——此时Activity已经初始化完成,上下文是有效的。

修改后的完整代码片段

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_find__shortst__path);
    TextView helloTextView = (TextView)findViewById(R.id.myTextView);

    // 图构建代码保持不变
    HipsterGraph<String,Double> graph = GraphBuilder.<String,Double>create()
            .connect("A").to("B").withEdge(2d)
            .connect("A").to("C").withEdge(2d)
            .connect("A").to("D").withEdge(2d)
            .connect("B").to("E").withEdge(5d)
            .connect("B").to("F").withEdge(10d)
            .connect("B").to("G").withEdge(5d)
            .connect("B").to("H").withEdge(10d)
            .connect("C").to("I").withEdge(5d)
            .connect("C").to("J").withEdge(10d)
            .connect("C").to("K").withEdge(5d)
            .connect("K").to("L").withEdge(5d)
            .createUndirectedGraph();

    SearchProblem p = GraphSearchProblem
            .startingFrom("A")
            .in(graph)
            .takeCostsFromEdges()
            .build();

    // 先获取结果并转为字符串,更清晰也方便调试
    Algorithm.SearchResult result = Hipster.createDijkstra(p).search("L");
    String resultText = result.toString();

    // 用Activity上下文显示Toast和更新TextView
    Toast.makeText(Find_Shortst_Path.this, resultText, Toast.LENGTH_LONG).show();
    helloTextView.setText(resultText);
}

修改后编译错误会消失,Toast和TextView也能正常显示路径结果。

3. 室内导航路径规划替代方案

如果你是做商场内找物品的功能,除了Hipster库,还有几个更贴合场景的选择:

  • 自己实现Dijkstra算法:Dijkstra核心逻辑简单,用邻接表存储商场节点(店铺、路口)和边(路径长度),自己编写可以灵活适配楼层信息、路径权重(比如避开拥挤区域),完全不依赖第三方库,调试也更自由。
  • Google Maps Indoor API:如果目标商场已接入谷歌室内地图,直接用这个API能快速实现室内路径规划,自带地图渲染和导航功能,适合商用场景。
  • GraphHopper:开源路径规划库,支持Dijkstra、A*等多种算法,有专门的Android适配版本,文档完善,适合自定义地图数据的场景。
  • OSRM (Open Source Routing Machine):适合大规模、复杂的室内地图数据,可部署自有服务或调用公共API,支持批量路径计算。

内容的提问来源于stack exchange,提问作者Ireshan M Pathirana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:11:18