2017-09-18 11 views
0

Retrofitでサーバーと通信しようとしていますが、常にnull参照が返されます。Android Retrofitライブラリは常にnullを返します

API:

パブリッククラス質問{

public String question; 
public String uploader; 
public boolean password; 
public String url; 

public Question(String question, String uploader, boolean password, String url) { 
    this.question = question; 
    this.uploader = uploader; 
    this.password = password; 
    this.url = url; 
} 

}

とネットワーククラス:アプリケーションにおいてhttp://gaborbencebekesi.hu/vote/api/get/questions

Iは、モデルクラスを有しています。

パブリッククラスネットワーク{

private final String API_URL = "http://gaborbencebekesi.hu/vote/"; 

private Retrofit retrofit; 

private interface Questions { 
    @GET("api/get/questions/") 
    Call<List<Question>> get(); 
} 

public Network() { 
    retrofit = new Retrofit.Builder() 
      .baseUrl(API_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
} 

public List<Question> GetQuestions() throws IOException { 

    // Create an instance of our GitHub API interface. 
    Questions questions = retrofit.create(Questions.class); 

    // Create a call instance for looking up Retrofit contributors. 
    Call<List<Question>> call = questions.get(); 

    // Fetch and print a list of the contributors to the library. 
    List<Question> q = call.execute().body(); 
    if(q == null) System.err.println("list is null"); 
    return q; 

} 

}

最後関数は常にnullを返します。

誰にも解決方法がありますか?

ありがとうございました!

+0

あなたQuestions.javaはファイルに何があなたのコードに変更してください? (Question.javaではない) – ninjayoto

答えて

0

メインスレッドでこの呼び出しを行っている可能性があります。

public void GetQuestions() throws IOException { 

    // Create an instance of our GitHub API interface. 
    Questions questions = retrofit.create(Questions.class); 

    // Create a call instance for looking up Retrofit contributors. 
    Call<List<Question>> call = questions.get(); 

    // Fetch and print a list of the contributors to the library. 
    call.enqueue(this); 
} 

コールバックを実装し、応答をコールバックで処理する必要があります。代わりに、非同期呼び出しを使用してください同期呼び出しを使用しての

0

、そう

Call<List<Question>> call = questions.get(); 
     call.enqueue(new Callback<List<Question>>() { 
      @Override 
      public void onResponse(Call<List<Question>> call, retrofit2.Response<List<Question>> response) { 
       if (response.body != null) { 
        for (int i = 0; i < response.body.size(); i++) 
         log.e("response", response.body.get(i)); 
       } 
      } 

      @Override 
      public void onFailure(Call<List<Question>> call, Throwable t) { 
        //handle fail 
      } 
     }); 
関連する問題