2016-07-26 9 views
0

私はこれに似た質問を検索しましたが、悲しいことに私はそれらを本当に混乱させてしまいましたが、AndroidとRetrofitを使っていてもまだ新しいです。Android Retrofit 1.9返信リストストリング成功時

私はここで、コンタクトリストのJSON

http://api.androidhive.info/contacts/ 

、すでに作業リストを持っているが、その後、私はいつでも私はちょうどそれを呼び出すことができますので、別のクラスにレトロフィットプロセスを処理したかったです。 UIを呼び出すMainActivityと、成功と失敗のメソッドを処理するRetrofitHandlerがあります。ここで

は私の問題は、それがLogCat上のエラーなしでスムーズに実行され、私の主な活動

public class MainActivity extends AppCompatActivity{ 

//note i just simplifiend my code a little 

private List<Contacts> contacts; 
public String[] itemer; 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    RetrofitHandler retrofitHandler = new RetrofitHandler(); 

    itemer = retrofitHandler.getContacts(this); 

    if (itemer != null) { 
     Toast.makeText(MainActivity.this,itemer[0],Toast.LENGTH_SHORT).show(); 

    } 

} 

されており、ここで私のhandlerClassのある

ublic class RetrofitHandler { 
public String[] item; 
public static final String ROOT_URL = "http://api.androidhive.info"; 
public List<Contacts> contacts; 

public String[] getContacts(final Context context) { 
    final ProgressDialog loading = ProgressDialog.show(context, "Fetching Data", "Please wait...", false, false); 

    RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ROOT_URL).build(); 
    ContactsAPI api = adapter.create(ContactsAPI.class); 

    api.getContacts(new Callback<Contacts>() { 
     @Override 
     public void success(Contacts contacts, Response response) { 
      loading.dismiss(); 
      MainActivity update = new MainActivity(); 
      List<Contact> contactList = contacts.getContacts(); 


      item = new String[contactList.size()]; 

      for (int i = 0; i < contactList.size(); i++) { 

       item[i] = contactList.get(i).getName(); 
      } 

     } 

     @Override 
     public void failure(RetrofitError error) { 
      Toast.makeText(context, "Error Occured", Toast.LENGTH_LONG).show(); 
     } 

    }); 
    return item; 
} 

。残念ながら主活動のトーストは現れません。

+0

がネットワークコールで、メインスレッドとバックグラウンドスレッドの問題がある可能性があります。 なぜ、 また、受信している応答がヌルであるかどうかを確認してください。 –

+0

@mohitsharma成功したときのトーストは、私が達成したものですが、もともと私は入れたいと思っています。 – user3262438

+0

チェックしてみてください:条件が実行されているかどうか、 ブロック内にPrintlnを入れて、条件をitemer.length/sizeに変更してみてください –

答えて

0

あなたの問題は、リクエスト/レスポンスの非同期性のためです。 SuccessまたはFailureコールバックは応答時に起動します。これは非同期的に発生します。だから基本的にあなたのメソッドは、が発生する前に、あなたの商品がnullであることを意味します返します。あなたは同期メカニズムを使用するか、問題のための完璧なソリューションを提供するMVP patternをチェックする必要があります。以下は同期呼び出しの使用例です(私はそれをテストしていませんが、うまくいくはずです)。

public List<Contacts> getContacts(){ 
    RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ROOT_URL).build(); 
    ContactsAPI api = adapter.create(ContactsAPI.class); 
    return api.getContacts(); 
} 

詳細については、tutorialを参照してください。私はあなたがレトロフィット1よりはるかに大きいレトロフィット2に移行することを提案します。

関連する問題