2017-05-31 1 views
0

私はJava用のAlexaスキルキットを使用してカスタムスキルを構築しています。 com.amazon.speech.speechlet.Sessionにカスタムセッション属性co.prosody.util.PaInputDataを使用しようとしています。AmazonのJava Alexaスキルキットを使用すると、カスタムJavaオブジェクトをセッション属性に入れることはできますか?

session.setAttribute("inputData", paInputData)ではありませんトラブルが、私は属性(PaInputData)session.getAttribute("inputData")を取得するとき、私はクラスのキャスト例外を取得:

「にErrorMessage」:「java.util.LinkedHashMapはco.prosody.utilにキャストすることはできません。 PaInputData "

オブジェクトを元に戻すことはできますか?

答えて

1

文字列ではないセッションに属する属性オブジェクトは、リンクされたハッシュマップに変換され、各インスタンス変数の名前がその値の名前にマッピングされます。あまりにも複雑でないオブジェクトの場合、セッションの属性に属するこのオブジェクトに関連付けられているリンクハッシュマップの各キーにアクセスして、これらの値をフェッチして、そのようにオブジェクトを再構築することができます。ただし、インスタンス変数に関連付けられたゲッターが必要です。セッションの属性に格納されているオブジェクトを、必要なオブジェクトに直接キャストすることはできません。私はこれをオブジェクトを再構築することができ、これは「MY_DOG」のキーと私のセッションの属性に保存されている場合

public class Dog{ 
    private String name = "Spot"; 
    private int age = 20; 
    public Dog(){ 

    } 
    public Dog(String nIn, int aIn){ 
     name = nIn; 
     age = aIn; 
    } 
    public int getAge(){ 
     return age; 
    } 
    public String getName(){ 
     return name; 
    } 


} 

それでは、二つのフィールドで、例えば、私は犬のオブジェクトを持っている、としましょうway:

LinkedHashMap<String, Object> myDog = (LinkedHashMap<String, Object>)session.getAttribute("MY_DOG"); 
String fetchedName = (String)myDog.get("name"); //this will return "Spot" 
int fetchedAge = (Integer)myDog.get("age"); //this will return 20 
Dog copyDog = new Dog(fetchedName, age);//effectively copies the Dog object 
関連する問題