Java中的getView和Beacon(Estimote)问题

Posted

技术标签:

【中文标题】Java中的getView和Beacon(Estimote)问题【英文标题】:getView and Beacon(Estimote) problem in Java 【发布时间】:2020-04-17 11:50:00 【问题描述】:

我的想法是从信标中获取标题,然后根据该标题向我发送适当的布局。但突然它不会识别我的询问。像 String == String 一样不行。

这是一个视图的代码,如果你们需要其他东西我会发布或者我们可以创建一个 Skype 会话来教我这个。

@Override
public View getView(int position, View convertView, ViewGroup parent) 

    ProximityContent content = nearbyContent.get(position);
    String beacon = content.getTitle();

    if (beacon == "one") 
        if (convertView == null) 
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;

            convertView = inflater.inflate(R.layout.tester_beacon_i, parent, false);
        
     else if (beacon == "two") 
        if (convertView == null) 
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;

            convertView = inflater.inflate(R.layout.tester_beacon_ii, parent, false);
        
     else if (beacon == "three") 
        if (convertView == null) 
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;

            convertView = inflater.inflate(R.layout.tester_beacon_iii, parent, false);
        
     else 
        if (convertView == null) 
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            assert inflater != null;

            convertView = inflater.inflate(R.layout.tester_beacon_iv, parent, false);
        
    

    return convertView;

所以每次我的应用启动时,我只获得了 4 次 tester_beacon_iv 布局,而不是同时获得所有 4 个信标上的所有 4 个布局。

附:我正在使用 Estimote 信标。

【问题讨论】:

【参考方案1】:

== 不能保证在 Java 中处理字符串。对于您的特殊情况,我建议使用 switch 语句。

switch (beacon) 
case "one":
    // ...
    break;
case "two":
    // ...
    break;
case "three":
    // ...
    break;
default:
    // When none of them match ...
    break;

【讨论】:

我这样做了,现在不是 4 次进入 layout_iv,而是再次进入 layout_1 而不是 layout_4 而不是 layout_1 和 layout_4... 与 .equal 相同... @NikolaMilojic 您是否尝试过使用“当我删除 if (convertView == null)”时它起作用了?【参考方案2】:

当您在 Java 中对两个字符串使用 == 时,您实际上并没有比较字符串本身。您将需要改用.equals(String)。这是因为== 实际上比较的是两个对象的引用,而不是它们的值。

string1.equals(string2) 根据字符串中的实际字符比较两个字符串。

在您的情况下,前三个信标永远不会匹配,因此您将获得布局 #4。你需要写:

if (beacon.equals("one")) 
  ...

【讨论】:

我这样做了,现在不是 4 次进入 layout_iv,而是再次进入 layout_1 而不是 layout_4 而不是 layout_1 和 layout_4... 当我删除 if (convertView == null) 并执行 .equals 时它起作用了,非常感谢我的朋友。

以上是关于Java中的getView和Beacon(Estimote)问题的主要内容,如果未能解决你的问题,请参考以下文章

java #Beacon Scan.java

iPhone4S 在 Beacon 检测中的奇怪行为

ViewPager 中的片段在 getView() 中返回 null

ZigBee网络信标(Beacon)和非信标(Non-beacon)两种工作模式

Android:从 viewPager 中的 Fragment 为 ListView 的适配器调用 getview()

在 iOS 中读取 Beacon 制造数据的最佳方式