2011-08-10 3 views
1

私のApp Engine/GWTプロジェクトは、ログインメソッドから戻るときにスタックトレースの厄介な小さな束を吐き出しています。私はGAEバージョン1.5.0とGWTバージョン2.3.0を使用しています。クライアントのエラー(null引数のメソッド 'nullMethod'を呼び出せません:nullMethod)

これは、Facebookアプリですので、私が持っていることはこれです:

  • プレイヤーは、アプリのページに移動します。
  • 彼らは、ボタンをクリックして、私はUIDを取得するために離れてクエリ文字列を破る
  • クエリ文字列での認証トークンと、彼らはその後、アプリに戻ってリダイレクトされ
  • OAuth認証ページにリダイレクトされていますそれをPlayerエンティティ(RPCからアプリケーションエンジンへのバックエンド)のプライマリキーとして使用する
  • データストアからPlayerエンティティインスタンスを取得し、それをシリアライズ可能な型に変換してクライアントに返します。
  • エピックが失敗します。

私はJSAlertで例外を吐き出すときに、私は(私はすでに「かわいい」の代わりに「難読化」を使用してコンパイルするのに十分な思いやりだった)スタックトレースの大きな厄介な山を取得します。

@Override 
public ClientPlayer login(String uid) { 
    PersistenceManager pm=PMF.get().getPersistenceManager(); 
    log.warning(Player.class.getName()); 
    log.warning(uid); 
    Key k=KeyFactory.createKey(Player.class.getSimpleName(), uid); 
    Player p; 
    List<List<Integer>> stats; 
    try{ 
     p=pm.getObjectById(Player.class, k); 
    } catch (JDOObjectNotFoundException e){ 
     p=new Player(uid); 
     p.setKey(k); 
     pm.makePersistent(p); 
    } finally { 
     pm.close(); 
    } 
    stats=p.getStats(); 
    return new ClientPlayer(p.getUID(),p.getPerm(), p.getDecks(),stats.get(0), stats.get(1), stats.get(2)); 
} 

残念ながら、NDAのために、私はアプリにリンクすることはできませんが、ここでは出力です:

私のログイン機能は、次のようになります

Failure to log in because of: 
    com.google.gwt.core.client.JavaScriptException: (TypeError): Cannot call method 'nullMethod' of null 
    arguments: nullMethod, 
    type: non_object_property_call 
    stack: TypeError: Cannot call method 'nullMethod' of null 
     at Object.ClientPlayer_1 (http://*.com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:993:89) 
     at Object.ClientPlayer_0 (http://*com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:984:18) 
     at Array.instantiate_1 [as 0] (http://*.com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:1031:10) 
     at $instantiate_0 (http://*.com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:10660:34) 
     at $instantiate (http://*.com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:1948:10) 
     at $readObject (http://*.com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:10148:95) 
     at Object.read_8 [as read] (http://*.com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:10608:10) 
     at $onResponseReceived (http://*.com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:10352:247) 
     at $fireOnResponseReceived (http://*.com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:5002:5) 
     at Object.onReadyStateChange (http:/*.com/com.MES.Tap2/A37A2E2E9A65DB1BAAE2BFA42572F7F8.cache.html:5222:5) 

答えて

1

問題がでましたIsSerializableインターフェイスの使用、またはそれの私の貧しい人々の理解。

IsSerialiazableオブジェクトを作成するときは、引数のないコンストラクタが必要です。そのコンストラクタのnull値をメインコンストラクタに渡していたので、メソッドが呼び出されたときにnullポインタ例外が発生しました。これは私のことわざだったが、ねえ、それは学習経験だった。私の特定のケースで

、それは少し、このように行ってきました...行われているはずです何

public class ClientObject implements IsSerializable { 
    private Object field1; 
    private Object field2; 
    private String field3; 

    public ClientObject(){ 
     this(null, null); 
    } 
    public ClientObject(Object arg1, Object arg2){ 
     field1=arg1; 
     field2=arg2; 
     field3=arg1.toString()+arg2.toString(); 
     //Error on above line, though not obviously mentioned in the message 
    } 
} 

は...

public ClientObject(){ 
    this(new Object(), new Object()); 
} 

・ホープこれは誰かに役立ちます。

関連する問題