2016-07-23 12 views
0

twitterユーザーのフォロワー数を取得するのは苦労しています。Twitter API経由でtwitterユーザーのフォロワー数を取得できません

私はTwitterの残りのAPIのドキュメントに従っていて、私の問題の答えを見つけることができませんでした。私は正常に残りのAPIを介して呼び出しを行っていると私は "成功"のコールを取得しているが、私は私の応答を解析するか分からない。彼らのドキュメントは、 "idsの"コレクションを返すと言っているので、私はids(List)のリストにレスポンスを解析できると仮定しましたが、gsonの解析エラーが発生します。 。空で

はここに関連するコードです:

package com.boomer.omer.kollabstr.backend.twitteroauth; 

輸入com.twitter.sdk.android.core.models.User;

import org.json.JSONObject; 

import java.util.List; 

import retrofit.Callback; 
import retrofit.http.GET; 
import retrofit.http.Query; 


    public interface TwitterGetFollowerCountApiClient { 

     @GET("/1.1/followers/ids.json") 
     void getFollowerCount(@Query("user_id")Long id, 
          @Query("screen_name")String screenname, 
          @Query("cursor")Long cursor, 
          @Query("stringify_ids")Boolean sids, 
          @Query("count")Long count, 
          Callback<JSONObject> users); 
} 

は、それから私は、/からのリクエストを処理し送信します。

private void createSocialMediaObject(final TwitterSession twitterSession){ 
    getKollabstrTwitterApiClient().getFollowerCountService(). 
      getFollowerCount(twitterSession.getUserId(), 
        null, 
        null, 
        null, 
        null, 
        new Callback<JSONObject>() { 
       @Override 
       public void success(Result<JSONObject> result) { 
        SocialMedia twitter = new SocialMedia(); 
        twitter.setUsername(twitterSession.getUserName()); 
        twitter.setUserid(Long.toString(twitterSession.getUserId())); 
        twitter.setSocialMediaType(SocialMediaType.TWITTER); 
        //twitter.setImpact(result.data.size()); 
        // Log.d(TAG,"FOLLOWERS:" + Integer.toString(result.data.size())); 
        Users user = SessionManager.getInstance().getCurrentUser(); 
        user.getProfile().getSocialMediaAccounts().add(twitter); 
        SessionManager.getInstance().updateUser(user); 
        Log.d("FOLLOWER",Integer.toString(result.data.length())); 
       } 

       @Override 
       public void failure(TwitterException exception) { 
        Log.d(TAG,"FOLLOWER ERROR:" + exception.toString()); 

       } 
      }); 



} 

私はここで自分のドキュメントを追っ:https://dev.twitter.com/rest/reference/get/followers/ids

を私は自分のページによるとフォロワーの数である必要があり、それの大きさを、得ることができるので、IDのリストを取得したいです。しかし、私は成功コールバック(私は成功したクエリが行われていることを仮定)を取得することはできますが、私はそれが応答が解析されるべきであることを把握することはできません。

何か助けていただければ幸いです。これを行うために私を単に他の図書館に紹介してはいけません。

+0

あなたの問題にかかわらず、[Retrofit 2](https://square.github。io/retrofit /)は、使用しているRetrofitのバージョンの後継バージョンです。 – PattaFeuFeu

+0

あなたの人生をはるかに簡単にするTwitter4Jという単純なライブラリがあります。 – Eenvincible

+0

@EENVincible私は特に、私は他のライブラリを使いたくないと言った。 –

答えて

2

答えが見つかりました。私は、RetrofitのResponseクラスへの応答を解析しなければなりませんでした。それをJSONオブジェクトに変換します。

public JSONObject responseToJSON(Response response){ 
    BufferedReader reader = null; 
    StringBuilder sb = new StringBuilder(); 
    JSONObject jsonObject = null; 
    try { 

     reader = new BufferedReader(new InputStreamReader(response.getBody().in())); 

     String line; 

     try { 
      while ((line = reader.readLine()) != null) { 
       sb.append(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 


    String result = sb.toString(); 

    try {jsonObject=new JSONObject(result); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    return jsonObject; 
} 
0

私はTwitterとの統合の作業を取得するために私のプロジェクトのいくつかに使用し、このコードを試してみてください。

Twitter4jセットアップ

ダウンロードtwitter4jライブラリ(jarファイル)、あなたのLIBSのフォルダと右に以下を追加しますlibsフォルダからそれらをクリックしてライブラリとして追加します。つまり、build.gradleファイルは次のようになります。

dependencies{ 

    ... 
    compile files('libs/twitter4j-async-4.0.4.jar') 
    compile files('libs/twitter4j-core-4.0.4.jar') 
} 

これで、このライブラリを使用してTwitterに接続する準備が整いました。

想定: Twitterの開発者アカウントですでにTwitterアプリケーションを作成しています。

次に、関係なく、あなたがリクエスト(AsyncTask、サービス、など)何をしたいかの:だから

//this sample code searches for twitter accounts 

//rest of your code here 

@Override 
protected ResponseList<User> doInBackground(String... params) { 

    String location = "kansas city"; 

    try { 
     //mTwitter is your Twitter instance! 
     return mTwitter.searchUsers(location, 20); 
    }catch (TwitterException e){ 
     e.getMessage(); 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(ResponseList<User> response){ 
    if (response != null){ 
     progress.dismiss(); 

     if (response.size() == 0){ 
      //you got no results back; zero 
     }else{ 

      //you can loop through the response list 

      User u = response.get(0); 

      Log.i("USERCOUNT", "THE COUNT: " + u.getFollowersCount()); 
     } 
    } 
} 

を、あなたはすぐにこのライブラリを使用して結果を得ることができます。

これはあなたを助けて、さらに助けが必要な場合にお知らせください。

+1

私は特に、他のライブラリを使用したくないと言った... –

+0

残念なことに、その部分は多分あなたのRetrofit 'ライブラリ'をアップデートしてくれるでしょうか? – Eenvincible

関連する問題