2016-07-23 206 views
0

我很难获取Twitter用户拥有的关注者人数。无法通过Twitter API获取twitter用户的关注者数量

我没有按照twitter rest api文档,找不到我的问题的答案。我成功地通过其余的API进行了通话,并且我正在收到“成功”回电,但我不知道如何解析我的回复。他们的文档一直说“它会返回一个”ID集合“,所以我认为我可以将这个响应解析成一个ID列表(List),但是这会导致一个gson解析错误,我可以成功解析它到一个JSONOBject中,但最终。为空

下面是相关代码:

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类解析为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文件夹中将它们点击到添加为库。这意味着您的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

对不起,这部分可能会更新你的改造'图书馆',这可能适合你吗? – Eenvincible

相关问题