2017-12-23 31 views
0

ユーザーのRedditフロントページを取得しようとしています。 Token Retrieval (code flow)で認証トークンを正常に受信しました。私はPostman経由で期待されるJSON応答を得ることができましたが、Retrofitで同じ結果を出すことはできません。コールバックでonFailure()が起動されているため、要求がタイムアウトしているようです。スコープを使用しています:identity、mysubreddits、およびreadReddit Api GETリクエストがPostmanで成功しましたが、Retrofitで失敗しました

その他の注意:十分なスコープを使用せず、有効期限が切れた認証トークンを使用している場合は、以下のコードで401と403の応答があります。

関連の定数:

redditToken = (actual auth token String) 
RedditConstants.REDDIT_BASE_URL_OAUTH2 = "https://oauth.reddit.com" 

関連法のセクション:

if (redditToken != null) { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(RedditConstants.REDDIT_BASE_URL_OAUTH2) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     Api api = retrofit.create(Api.class); 

     Map<String, String> headers = new HashMap<>(); 
     headers.put("Authorization", "bearer " + redditToken); 
     headers.put("User-Agent", RedditConstants.REDDIT_USER_AGENT); 

     Call<RedditFeed> call = api.getFeed(headers); 
     call.enqueue(new Callback<RedditFeed>() { 
      @Override 
      public void onResponse(Call<RedditFeed> call, Response<RedditFeed> response) { 
       Log.d("FINDME", "response "+ response.toString()); 

       if (response.isSuccessful()) { 
        Log.d("FINDME", "response was a success! we got the feed!"); 
       } else { 
        Log.d("FINDME", "responce was not successfull triggered"); 
       } 
      } 
      @Override 
      public void onFailure(Call<RedditFeed> call, Throwable t) { 
       Log.d("FINDME", "onFailure called from populateRedditFeed"); 
      } 
     }); 
    } else { 
     Toast.makeText(this, "Please Login with Reddit", Toast.LENGTH_SHORT).show(); 
    } 

改修インタフェース:

public interface Api { 
    @GET(".") 
    Call<RedditFeed> getFeed (
      @HeaderMap Map<String, String> headers 
    ); 
} 

ログ結果:

D/NetworkSecurityConfig: No Network Security Config specified, using 
platform default 
I/zygote: Do full code cache collection, code=123KB, data=105KB 
After code cache collection, code=111KB, data=79KB 
D/FINDME: onFailure called from populateRedditFeed 

郵便集配人成功:

enter image description here

+0

throwableをonFailureに印刷すると、エラーが何であるかがわかります。 – Kushan

+0

コードを変更することなく、ここに投稿してください。私は今、成功を収めています。私がスターバックスにいて、私の家のWiFiを使っている前に、おそらくそれはそれと関係があります。私は明日スターバックスでそれをテストして確認します。 –

+0

ハハクール:)知っておいて....コードがうまくいて、401と403のコードを指摘していたので、あなたは認証トークンについて知っていたことを知っていました...そういうわけで、ログ、とにかくログを残して、それはあなたを助けるでしょう。 – Kushan

答えて

0

した後、多くの開始と停止しますが、一見ランダムになってどちらか200か私は私のレトロフィットモデルクラスのいずれかで問題を発見した()ONFAILUREを呼び出します。 JSON response from Redditには、longまたはbooleanのいずれかのフィールドが含まれています。私はそれが長いとして返されたときにllegalStateExceptionをスローしたJavaクラスのブール値として定義しました。

type  name  description 
special edited false if not edited, edit date in UTC epoch-seconds 
        otherwise. NOTE: for some old edited comments on reddit.com, this will 
        be set to true instead of edit date. 

私はフィールドをコメントアウトしましたし、期待通りにコードが動作する今のように、Javaでのタイプのこの二重性に対処する方法がわからないんです*。

関連する問題