2016-05-08 6 views
0
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(URL).build(); 
api api = restAdapter.create(api.class); 
api.get(value, new Callback<model>(){ 

      @Override 
      public void success(model model, Response response) { 
       //get value of a here. 
       a=model.getA(); 

      } 

      @Override 
      public void failure(RetrofitError error) { 
       error.printStackTrace(); 
      } 
     }); 
Toast.makeText(getApplicationContext(),a, Toast.LENGTH_SHORT).show(); 

外付けの改造機能を使用したいと思いますが、無効です。
私は最終的に試しましたが、最初に値を与える必要があります(getA()から値を得ることはできません) またはgetA()が最後にある(しかし、それはローカル変数であるため、 )改装は独自の方法から価値を引き出すことができません

答えて

0

あなたの問題はRetrofitから値を得ることに関するものではありません。 get関数を実行するとすぐにToastを表示しようとしていますが、要求は非同期であり、サーバーからの応答が得られるまで待つべきです。

RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(URL).build(); 
api api = restAdapter.create(api.class); 
api.get(value, new Callback<model>(){ 

      @Override 
      public void success(model model, Response response) { 
       //get value of a here. 
       a=model.getA(); 
       Toast.makeText(getApplicationContext(),a, Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       error.printStackTrace(); 
      } 
     }); 

か、それはあなたがアプリフリーズおよびshow ANRさせますので、あなたの代わりに同期要求を使用しますが、限り、あなたは、メインスレッド上にあるように、同期要求を使用して回避することができます:あなたはこのような何かにあなたのコードを変更する必要がありますエラー。

+0

とても素早く回答していただきありがとうございます。 しかし、私は間接的に値を使用する必要があります たとえば、私は値を使用してclicklistenerにしたいが、私はoncreate()のような他のメソッドに書き込む必要があります。 私は....外部に書き込む方法はありませんか?私は本当にそれを信じることができませんOTZ – Jimmy

+0

コールバックの外でその変数を使用すると問題はありませんが、あなたはすでにサーバーから値を取得していることを確認する必要がありますサーバーからの応答を得る前にそれを使用しないでください。 –

+0

私は次のように試してみました:どのようなトースト(例えば:a)サーバーから取得する(retrofit内)。それは動作しますが、私がもう一度電話をかけたときに、nullpointerはちょうど私にトーストすることで成功します。だから私はサーバが大丈夫だと確信しています。 バージョンがそれを導くかどうかはわかりません。 – Jimmy

関連する問題