1

Android プログラムでは、次のようなデータ構造を表す必要があります。

<?xml version="1.0" encoding="utf-8"?>
<points>
    <point id="La Gioconda">
       <rssi id="north">-55</rssi>
       <rssi id="east" >-76</rssi>
       <rssi id="south">-64</rssi>
       <rssi id="east" >-92</rssi>
    </point>
    <point id="La Pietà">
       <rssi id="north">-51</rssi>
       <rssi id="east" >-60</rssi>
       <rssi id="south">-88</rssi>
       <rssi id="east" >-59</rssi>
    </point>
</points>

以下に、私が使用したクラス Points、Point、および Rssi を報告すると、このエラーが発生します。

05-03 07:49:19.884: DEBUG/com.marcos.training.TrainingActivity(354): org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=, required=true, type=void) on field 'dbm' protected java.lang.Integer com.marcos.training.Rssi.dbm for class com.marcos.training.Rssi at line 4

確かに私は明らかな何かを見逃しています... :-(

ファイル Points.java:

package com.marcos.training;

import java.util.List;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;

@Element
public class Points {
    @ElementList(inline=true)
    private List<Point> list;

    public Integer getSize() {
        return list.size();
    }

    public List<Point> getList() {
       return list;
    }
}

ファイル Point.java:

package com.marcos.training;

import java.util.List;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

import android.util.Log;

@Root
public class Point {
    private final static String TAG = TrainingActivity.class.getCanonicalName();

    @ElementList(inline=true)
    private List<Rssi> list;

    @Attribute
    protected String id;

    public String getId() {
        return id;
    }

    public Integer getRssi(String id) {
        int len = list.size();
        for (int i = 0; i < len; i++) {
            if (list.get(i).getId().equalsIgnoreCase(id)) {
                return list.get(i).getDbm();
            }
        }
        Log.d(TAG, "getRssi(): unforeseen id \"" + id + "\"");
        return 999;
    }
}

Rssi.java ファイル:

package com.marcos.training;

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root
public class Rssi {

    @Attribute
    protected String id;

    @Element
    protected Integer rssi;

    public String getId() {
       return id;
    }

    public Integer getRssi() {
      return rssi;
   }
}
4

2 に答える 2

6

問題はあなたのRssiクラスにあります。rssi要素には子要素がないため、次の注釈は正しくありません。

@Element
protected Integer rssi;

@Text代わりに注釈を使用する必要があります。

@Text
protected Integer rssi;

または、リストの代わりに、を使用しElementMapてrssiマッピングを保持することをお勧めします。たとえば、Pointクラスを次のように変更できます。

@Root
public class Point {

    @ElementMap(entry="rssi", key="id", attribute=true, inline=true)
    private Map<String,Integer> rssiMap;

    @Attribute
    protected String id;

    public String getId() {
        return id;
    }

    public Integer getRssi(String id) {
        Integer val = rssiMap.get(id);
        if(val == null){
            return 999;
        }
        return val;
    }
}
于 2011-05-03T09:13:47.610 に答える
2

まず、@RootRssi および Point クラスから削除する必要があります。これらは xml のルートではないためです。

第二に、エラーはいくつかの「dbm」フィールドに関連しているため、ここでクラスまたは xml が古いようです。これは、xml および Java コードでは欠落しています。新しいバージョンでは、次のようなものがあると思います。

 <rssi id="north" dbm="55"/>

必要なのは Rssi クラスだけです。

  @Attribute
  private Integer dbm;
于 2011-05-03T08:30:51.467 に答える