2014-12-13 3 views
0

Я получаю 20 твитов, которые требуют слишком много времени для загрузки. Я хочу ограничить твиты, но не знаю, где я должен ограничивать твиты в кодировании. Может ли кто-нибудь сказать мне ограничить твиты, пожалуйста.Ограничьте количество твитов в Twitter Api ver 1.1

Основная деятельность

public class MainActivity extends ListActivity { 

    private ListActivity activity; 
    final static String ScreenName = "google"; 
    final static String LOG_TAG = "rnc"; 
    ListView listview; 
     TextView text; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.twit_list); 


      listview = this.getListView(); 

     activity = this; 

     downloadTweets(); 


      listview.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
          int position, long id) { 
       // selected item 
       String lst_txt = parent.getItemAtPosition(position).toString().trim(); 


       // Launching new Activity on selecting single List Item 
       Intent i = new Intent(MainActivity.this, SingleListItem.class); 
       // sending data to new activity 
       i.putExtra("product",lst_txt); 
       startActivity(i); 
       } 
      }); 
    } 

    // download twitter timeline after first checking to see if there is a network connection 
    public void downloadTweets() { 
     ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 

     if (networkInfo != null && networkInfo.isConnected()) { 
      new DownloadTwitterTask().execute(ScreenName); 
     } else { 
      Log.v(LOG_TAG, "No network connection available."); 
     } 
    } 

    // Uses an AsyncTask to download a Twitter user's timeline 
    private class DownloadTwitterTask extends AsyncTask<String, Void, String> { 
     final static String CONSUMER_KEY = "keyvaluexxxxx"; 
     final static String CONSUMER_SECRET = "secretkeyxxxxxxx"; 
     final static String TwitterTokenURL = "https://api.twitter.com/oauth2/token"; 
     final static String TwitterStreamURL = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name="; 


     private ProgressDialog progressDialog; 
     @Override 
     // can use UI thread here 
     protected void onPreExecute() { 
     //this.progressDialog = ProgressDialog.show(Boys.this, ""," Look whose back !! Ok Let me see what i have for you "); 
      try{ 
      progressDialog = new ProgressDialog(MainActivity.this,AlertDialog.THEME_HOLO_DARK); 
      progressDialog.setIndeterminate(true); 
      progressDialog.setIndeterminateDrawable(getResources().getDrawable(R.drawable.loader_2)); 
      progressDialog.setMessage("Please Wait ! Unwrapping Something for You..."); 
      progressDialog.show(); 
      progressDialog.setCancelable(false); 
      progressDialog.setCanceledOnTouchOutside(false); 
      } 
      catch(Exception e) 
      { 
       this.progressDialog.dismiss(); 
       Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_LONG).show(); 

      } 
     } 

     @Override 
     protected String doInBackground(String... screenNames) { 
      String result = null; 

      if (screenNames.length > 0) { 
       result = getTwitterStream(screenNames[0]); 
      } 
      return result; 
     } 

     // onPostExecute convert the JSON results into a Twitter object (which is an Array list of tweets 
     @Override 
     protected void onPostExecute(String result) { 
      Twitter twits = jsonToTwitter(result); 

      // lets write the results to the console as well 
      for (Tweet tweet : twits) { 
       Log.i(LOG_TAG, tweet.getText()); 
      } 

      // send the tweets to the adapter for rendering 
      ArrayAdapter<Tweet> adapter = new ArrayAdapter<Tweet>(activity, android.R.layout.simple_list_item_1, twits); 
      setListAdapter(adapter); 
      this.progressDialog.dismiss(); 
     } 

     // converts a string of JSON data into a Twitter object 
     private Twitter jsonToTwitter(String result) { 
      Twitter twits = null; 
      if (result != null && result.length() > 0) { 
       try { 
        Gson gson = new Gson(); 
        twits = gson.fromJson(result, Twitter.class); 
       } catch (IllegalStateException ex) { 
        // just eat the exception 
       } 
      } 
      return twits; 
     } 

     // convert a JSON authentication object into an Authenticated object 
     private Authenticated jsonToAuthenticated(String rawAuthorization) { 
      Authenticated auth = null; 
      if (rawAuthorization != null && rawAuthorization.length() > 0) { 
       try { 
        Gson gson = new Gson(); 
        auth = gson.fromJson(rawAuthorization, Authenticated.class); 
       } catch (IllegalStateException ex) { 
        // just eat the exception 
       } 
      } 
      return auth; 
     } 

     private String getResponseBody(HttpRequestBase request) { 
      StringBuilder sb = new StringBuilder(); 
      try { 

       DefaultHttpClient httpClient = new DefaultHttpClient(new BasicHttpParams()); 
       HttpResponse response = httpClient.execute(request); 
       int statusCode = response.getStatusLine().getStatusCode(); 
       String reason = response.getStatusLine().getReasonPhrase(); 

       if (statusCode == 200) { 

        HttpEntity entity = response.getEntity(); 
        InputStream inputStream = entity.getContent(); 

        BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
        String line = null; 
        while ((line = bReader.readLine()) != null) { 
         sb.append(line); 
        } 
       } else { 
        sb.append(reason); 
       } 
      } catch (UnsupportedEncodingException ex) { 
      } catch (ClientProtocolException ex1) { 
      } catch (IOException ex2) { 
      } 
      return sb.toString(); 
     } 

     private String getTwitterStream(String screenName) { 
      String results = null; 

      // Step 1: Encode consumer key and secret 
      try { 
       // URL encode the consumer key and secret 
       String urlApiKey = URLEncoder.encode(CONSUMER_KEY, "UTF-8"); 
       String urlApiSecret = URLEncoder.encode(CONSUMER_SECRET, "UTF-8"); 

       // Concatenate the encoded consumer key, a colon character, and the 
       // encoded consumer secret 
       String combined = urlApiKey + ":" + urlApiSecret; 

       // Base64 encode the string 
       String base64Encoded = Base64.encodeToString(combined.getBytes(), Base64.NO_WRAP); 

       // Step 2: Obtain a bearer token 
       HttpPost httpPost = new HttpPost(TwitterTokenURL); 
       httpPost.setHeader("Authorization", "Basic " + base64Encoded); 
       httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); 
       httpPost.setEntity(new StringEntity("grant_type=client_credentials")); 
       String rawAuthorization = getResponseBody(httpPost); 
       Authenticated auth = jsonToAuthenticated(rawAuthorization); 

       // Applications should verify that the value associated with the 
       // token_type key of the returned object is bearer 
       if (auth != null && auth.token_type.equals("bearer")) { 

        // Step 3: Authenticate API requests with bearer token 
        HttpGet httpGet = new HttpGet(TwitterStreamURL + screenName); 

        // construct a normal HTTPS request and include an Authorization 
        // header with the value of Bearer <> 
        httpGet.setHeader("Authorization", "Bearer " + auth.access_token); 
        httpGet.setHeader("Content-Type", "application/json"); 
        // update the results with the body of the response 
        results = getResponseBody(httpGet); 
       } 
      } catch (UnsupportedEncodingException ex) { 
      } catch (IllegalStateException ex1) { 
      } 
      return results; 
     } 
    } 
} 

Twitter.java

import java.util.ArrayList; 

// a collection of tweets 
public class Twitter extends ArrayList<Tweet> { 
    private static final long serialVersionUID = 1L; 
} 

TwitterUser.java

public class TwitterUser { 

    @SerializedName("screen_name") 
    private String screenName; 

    @SerializedName("name") 
    private String name; 

    @SerializedName("profile_image_url") 
    private String profileImageUrl; 

    public String getProfileImageUrl() { 
     return profileImageUrl; 
    } 

    public String getScreenName() { 
     return screenName; 
    } 

    public void setProfileImageUrl(String profileImageUrl) { 
     this.profileImageUrl = profileImageUrl; 
    } 

    public void setScreenName(String screenName) { 
     this.screenName = screenName; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

Xml файл, связанный с MainActivity.java

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
    android:background="@drawable/bis" 

     > 

<ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

</ListView> 


</LinearLayout> 
+0

вы можете указать количество, чтобы получить конкретное количество твитов https://dev.twitter.com/rest/reference/get/statuses/user_timeline –

+0

Спасибо @PramodYadav за ответ, но я не получить идеал как использовать его i code – Creator

+0

pass count как нет из твитов, которые вы хотите в качестве параметра, ваши запросы на получение твитов –

ответ

0

где вы делаете ваш запрос получит вы можете указать параметр счетчика в апи в качестве параметра, чтобы получить определенное количество отсчетов

HttpGet httpGet = new HttpGet(TwitterStreamURL + screenName+"&count=10"); 

здесь я получить 10 манипулировать им в соответствии с вашим использованием

+0

спасибо, что это сработало !!! И если у вас есть время, вы также можете рассмотреть этот вопрос, пожалуйста, http://stackoverflow.com/questions/27448641/how-to-implement-customadapter-in-listview-acitive – Creator

Смежные вопросы