Tuesday 12 August 2014

Fetching Twitter Following (Friends) List using twitter 4j


Twitter Following(Friends) List With Twitter Integration


Hello friends, Today I am going to share the code for fetching twitter following/friends list with twitter integration.I am fetching in list the following's id,name and picture ,you can modify the code according to your need

->First step you have to get your consumer key ans consumer secret for your app

To get Consumer Key & Consumer Secret, you have to create an app in Twitter via
Then you'll be taken to a page containing Consumer Key & Consumer Secret.
Please note that you have selected your application access type: Read,Write and Access direct messages

-> After getting the consumer key and consumer secret,next step is to add jar files in libs folder of your project .You have to add following jar files in the libs folder:

1.- signpost-commonshttp4-1.2.jar

2.- signpost-core-1.2.1.1.jar

3.- signpost-jetty6-1.2.1.1.jar

4.- simple-social-sharing-1.0.2-with-sources.jar

5.- twitter4j-core-4.0.1.jar

6.- universal-image-loader-1.9.1.jar

-The first three that are signpost libraries,you can get it from the link:     https://code.google.com/p/oauth-signpost/downloads/list

-And for simple-social -sharing from the link:  https://github.com/nostra13/Android-Simple-Social-Sharing/tree/master/Jar

-And for twitter4j core the link is : http://twitter4j.org/en/index.html#download

- Download the universal image loader from this link : https://github.com/nostra13/Android-Universal-Image-Loader/tree/master/downloads

You can also get these jars from my source code which I have added in last,you can get it after adding the code in your google drive.

->Let's move to the coding part ,first we have to make a layout having a listview to the the following list .I have named it activity_main.xml

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

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


</LinearLayout>

->make another package in src folder named  "nrtd.twittersh" and then add following three classes in this new package :

1.- PreferenceUtils.java

package nrtd.twittersh;

import twitter4j.auth.AccessToken;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class PreferenceUtils 
{
private SharedPreferences sharedPref;
    private Editor editor;

    private static final String TWEET_AUTH_KEY = "auth_key";
    private static final String TWEET_AUTH_SECRET_KEY = "auth_secret_key";
    private static final String TWEET_USER_NAME = "user_name";
    private static final String TWEET_USER_ID = "user_id";
    private static final String TWEET_USER_SCREEN_NAME = "user_screen_name";
    
    private static final String SHARED = "SOT_Preferences";

    public PreferenceUtils(Context context)
    {
        sharedPref = context.getSharedPreferences(SHARED, Context.MODE_PRIVATE);

        editor = sharedPref.edit();
    }

    public void storeAccessToken(AccessToken accessToken, String username) 
    {
        editor.putString(TWEET_AUTH_KEY, accessToken.getToken());
        editor.putString(TWEET_AUTH_SECRET_KEY, accessToken.getTokenSecret());
        editor.putString(TWEET_USER_NAME, username);

        editor.commit();
    }
    
    public void storeUserCredentials(long userId, String userScreenName)
    {
    editor.putLong(TWEET_USER_ID, userId);
    editor.putString(TWEET_USER_SCREEN_NAME, userScreenName);
    
    editor.commit();
    }

    public void resetAccessToken() 
    {
        editor.putString(TWEET_AUTH_KEY, null);
        editor.putString(TWEET_AUTH_SECRET_KEY, null);
        editor.putString(TWEET_USER_NAME, null);

        editor.commit();
    }

    public String getUsername() 
    {
        return sharedPref.getString(TWEET_USER_NAME, "");
    }
    
    public long getUserId() 
    {
        return sharedPref.getLong(TWEET_USER_ID, 0);
    }
    
    public String getUserScreenName() 
    {
        return sharedPref.getString(TWEET_USER_SCREEN_NAME, "");
    }
    
    public String getToken() 
    {
        return sharedPref.getString(TWEET_AUTH_KEY, "");
    }
    
    public String getTokenSecret() 
    {
        return sharedPref.getString(TWEET_AUTH_SECRET_KEY, "");
    }

    public AccessToken getAccessToken() 
    {
        String token = sharedPref.getString(TWEET_AUTH_KEY, null);
        String tokenSecret = sharedPref.getString(TWEET_AUTH_SECRET_KEY, null);

        if (token != null && tokenSecret != null)
            return new AccessToken(token, tokenSecret);
        else
            return null;
    }
    
public void clearCredentials() 
{
editor.remove(TWEET_AUTH_KEY);
editor.remove(TWEET_AUTH_SECRET_KEY);
editor.remove(TWEET_USER_NAME);
editor.remove(TWEET_USER_ID);
editor.remove(TWEET_USER_SCREEN_NAME);
editor.commit();
}

}

2.- TwitterDialog.java

package nrtd.twittersh;

import com.twitter.follower.R;

import nrtd.twittersh.TwitterApp.TwDialogListener;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Display;
import android.view.ViewGroup;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TwitterDialog extends Dialog {

    static final float[] DIMENSIONS_LANDSCAPE = { 460, 260 };
    static final float[] DIMENSIONS_PORTRAIT = { 280, 420 };
    static final FrameLayout.LayoutParams FILL = new FrameLayout.LayoutParams(
            ViewGroup.LayoutParams.FILL_PARENT,
            ViewGroup.LayoutParams.FILL_PARENT);
    static final int MARGIN = 4;
    static final int PADDING = 2;
    private String mUrl;
    private TwDialogListener mListener;
    private ProgressDialog mSpinner;
    private WebView mWebView;
    private LinearLayout mContent;
    private TextView mTitle;
    private boolean progressDialogRunning = false;
    private Context mContext;

    public TwitterDialog(Context context, String url, TwDialogListener listener) {
        super(context);
        mContext = context;
        mUrl = url;
        mListener = listener;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mSpinner = new ProgressDialog(getContext());

        mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
        mSpinner.setMessage("Loading...");

        mContent = new LinearLayout(getContext());

        mContent.setOrientation(LinearLayout.VERTICAL);

        setUpTitle();
        setUpWebView();

        Display display = getWindow().getWindowManager().getDefaultDisplay();
        final float scale = getContext().getResources().getDisplayMetrics().density;
        float[] dimensions = (display.getWidth() < display.getHeight()) ? DIMENSIONS_PORTRAIT
                : DIMENSIONS_LANDSCAPE;

        addContentView(mContent, new FrameLayout.LayoutParams(
                (int) (dimensions[0] * scale + 0.5f), (int) (dimensions[1]
                        * scale + 0.5f)));
    }

    private void setUpTitle() {
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        Drawable icon = getContext().getResources().getDrawable(
                R.drawable.ic_launcher);

        mTitle = new TextView(getContext());

        mTitle.setText("Twitter");
        mTitle.setTextColor(Color.WHITE);
        mTitle.setTypeface(Typeface.DEFAULT_BOLD);
        mTitle.setBackgroundColor(0xFFbbd7e9);
        mTitle.setPadding(MARGIN + PADDING, MARGIN, MARGIN, MARGIN);
        mTitle.setCompoundDrawablePadding(MARGIN + PADDING);
        mTitle.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);

        mContent.addView(mTitle);
    }

    private void setUpWebView() {
        mWebView = new WebView(getContext());

        mWebView.setVerticalScrollBarEnabled(false);
        mWebView.setHorizontalScrollBarEnabled(false);
        mWebView.setWebViewClient(new TwitterWebViewClient());
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.loadUrl(mUrl);
        mWebView.setLayoutParams(FILL);

        mContent.addView(mWebView);
    }

    private class TwitterWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith(TwitterApp.CALLBACK_URL)) {
                mListener.onComplete(url);

                TwitterDialog.this.dismiss();

                return true;
            } else if (url.startsWith("authorize")) {
                return false;
            }
            return true;
        }

        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);
            mListener.onError(description);
            TwitterDialog.this.dismiss();
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            mSpinner.show();
            progressDialogRunning = true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            String title = mWebView.getTitle();
            if (title != null && title.length() > 0) {
                mTitle.setText(title);
            }
            progressDialogRunning = false;
            mSpinner.dismiss();
        }

    }

    @Override
    protected void onStop() {
        progressDialogRunning = false;
        super.onStop();
    }

    public void onBackPressed() {
        if(!progressDialogRunning){
            TwitterDialog.this.dismiss();
        }
       
    }
}


3.- TwiiterApp.java

package nrtd.twittersh;

import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import oauth.signpost.OAuthProvider;
import oauth.signpost.basic.DefaultOAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;

import twitter4j.PagableResponseList;
import twitter4j.Status;
import twitter4j.StatusUpdate;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.auth.AccessToken;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Window;


public class TwitterApp {
    private Twitter mTwitter;
    private PreferenceUtils mSession;
    private CommonsHttpOAuthConsumer mHttpOauthConsumer;
    private OAuthProvider mHttpOauthprovider;
    private AccessToken mAccessToken;
    private String mConsumerKey;
    private String mSecretKey;
    private ProgressDialog mProgressDlg;
    private TwDialogListener mListener;
    private Activity context;
ArrayList<HashMap<String,String>> ShowMap = new ArrayList<HashMap<String,String>>();
private PagableResponseList<User> mList ;
    public static final String  OAUTH_CALLBACK_SCHEME   = "x-oauthflow-twitter";
    public static final String  OAUTH_CALLBACK_HOST     = "callback";
    public static final String  CALLBACK_URL      = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;
    private static final String TWITTER_ACCESS_TOKEN_URL = "https://api.twitter.com/oauth/access_token";
    private static final String TWITTER_AUTHORZE_URL = "https://api.twitter.com/oauth/authorize";
    private static final String TWITTER_REQUEST_URL = "https://api.twitter.com/oauth/request_token";
    
    public TwitterApp(Activity context, String consumerKey, String secretKey) 
    {
    this.context = context;
   
        mTwitter = new TwitterFactory().getInstance();
        mSession = new PreferenceUtils(context);
        mProgressDlg = new ProgressDialog(context);

        mProgressDlg.requestWindowFeature(Window.FEATURE_NO_TITLE);

        mConsumerKey = consumerKey;
        mSecretKey = secretKey;

        mHttpOauthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, mSecretKey);

        String request_url=TWITTER_REQUEST_URL;
        String access_token_url=TWITTER_ACCESS_TOKEN_URL;
        String authorize_url=TWITTER_AUTHORZE_URL;

        mHttpOauthprovider = new DefaultOAuthProvider(request_url, access_token_url, authorize_url);
        mAccessToken = mSession.getAccessToken();

        configureToken(); 
    }
    
    public void setListener(TwDialogListener listener) {
        mListener = listener;
    }

    private void configureToken() {
        if (mAccessToken != null)
        {
            mTwitter.setOAuthConsumer(mConsumerKey, mSecretKey);
            mTwitter.setOAuthAccessToken(mAccessToken);
        }
    }

    public boolean hasAccessToken() {
        return (mAccessToken == null) ? false : true;
    }

    public void resetAccessToken() {
        if (mAccessToken != null) {
            mSession.resetAccessToken();

            mAccessToken = null;
        }
    }

    public String getUsername() {
        return mSession.getUsername();
    }
    
    public long getUserId() {
        return mSession.getUserId();
    }
    
    public String getUserScreenName() {
        return mSession.getUserScreenName();
    }
    
    public String getToken() {
        return mSession.getToken();
    }
    
    public String getTokenSecret() {
        return mSession.getTokenSecret();
    }
    public String getProfilePic(long id)
    {
    User user;
    String url ="";
try {

user = mTwitter.showUser(id);

url = user.getProfileImageURL();

} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return url;
    }
    public Status updateStatus(String status) throws Exception {
        try {
            return mTwitter.updateStatus(status);
        } catch (TwitterException e) {
            throw e;
        }
    }
    
    public Status updateStatus(StatusUpdate status) throws Exception {
        try {
        return mTwitter.updateStatus(status);
        } catch (TwitterException e) {
            throw e;
        }
    }
    
    public void authorize() {
        mProgressDlg.setMessage("Loading...");
        mProgressDlg.show();

        new Thread() {
            @Override
            public void run() {
                String authUrl = "";
                int what = 1;

                try {
                    authUrl = mHttpOauthprovider.retrieveRequestToken(
                            mHttpOauthConsumer, CALLBACK_URL);
                    what = 0;
                } catch (Exception e) {
                    e.printStackTrace();
                }
                mHandler.sendMessage(mHandler
                        .obtainMessage(what, 1, 0, authUrl));
            }
        }.start();
    }

    public void processToken(String callbackUrl) {
        mProgressDlg.setMessage("Finalizing ...");
        mProgressDlg.show();

        final String verifier = getVerifier(callbackUrl);

        new Thread() {
            @Override
            public void run() {
                int what = 1;

                try {
                    mHttpOauthprovider.retrieveAccessToken(mHttpOauthConsumer,
                            verifier);

                    mAccessToken = new AccessToken(
                            mHttpOauthConsumer.getToken(),
                            mHttpOauthConsumer.getTokenSecret());

                    configureToken();

                    User user = mTwitter.verifyCredentials();
                    
                    mSession.storeAccessToken(mAccessToken, user.getName());

                    mSession.storeUserCredentials(user.getId(), user.getScreenName());
                    
                    what = 0;
                } catch (Exception e) {
                    e.printStackTrace();
                }

                mHandler.sendMessage(mHandler.obtainMessage(what, 2, 0));
            }
        }.start();
    }

    public ArrayList<HashMap<String, String>> getFriendList(String str,long arg1)
    {
    Log.d("FriendList",">>");
    try {


mList  = mTwitter.getFriendsList(str, -1);
Log.d("FriendList","22>>"+mTwitter.getFriendsList(str,-1));
for (int i = 0; i < mList.size(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Log.d("FriendList","266>>"+mList.get(i).getName());
Log.d("User",">.>"+mList.get(i).getProfileImageURL());
Log.d("User",">.>"+mList.get(i).getId());
map.put("friend_id", ""+mList.get(i).getId());
map.put("friend_name", mList.get(i).getName());
map.put("friend_photo",mList.get(i).getProfileImageURL());
ShowMap.add(map);
}

} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    return ShowMap;
    }
    private String getVerifier(String callbackUrl) {
        String verifier = "";

        try {
            callbackUrl = callbackUrl.replace(OAUTH_CALLBACK_SCHEME, "http");

            URL url = new URL(callbackUrl);
            String query = url.getQuery();

            String array[] = query.split("&");

            for (String parameter : array) {
                String v[] = parameter.split("=");

                if (URLDecoder.decode(v[0]).equals(
                        oauth.signpost.OAuth.OAUTH_VERIFIER)) {
                    verifier = URLDecoder.decode(v[1]);
                    break;
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        return verifier;
    }

    private void showLoginDialog(String url) {
        final TwDialogListener listener = new TwDialogListener() {

            public void onComplete(String value) {
                processToken(value);
            }

            public void onError(String value) {
                mListener.onError("Failed opening authorization page");
            }
        };

        new TwitterDialog(context, url, listener).show();
    }

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            mProgressDlg.dismiss();

            if (msg.what == 1) {
                if (msg.arg1 == 1)
                    mListener.onError("Error getting request token");
                else
                    mListener.onError("Error getting access token");
            } else {
                if (msg.arg1 == 1)
                    showLoginDialog((String) msg.obj);
                else
                    mListener.onComplete("");
            }
        }
    };

    public interface TwDialogListener {
        public void onComplete(String value);

        public void onError(String value);
    }



}

->After adding above three classes in the new package in src folder ,let's write the code in MainActivity.java

Note: Please replace  TWITTER_CONSUMER_KEY and  TWITTER_SECRET_KEY with your consumer key and secret key.

package com.twitter.follower;


import java.util.ArrayList;
import java.util.HashMap;

import nrtd.twittersh.TwitterApp;
import nrtd.twittersh.TwitterApp.TwDialogListener;
import com.twitter.follower.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity{

public static String TAG = MainActivity.class.getName();
String userScreenName;
 long user_id;
 ArrayList<HashMap<String,String>> ShowList = new ArrayList<HashMap<String,String>>();
ListView list_main;
private Handler mHandler=null;
private TwitterApp mTwitter=null;
private ProgressDialog progressdialog=null,pDialog = null;

public static final String TWITTER_CONSUMER_KEY = "ADD YOUR APP CONSUMER KEY HERE";
public static final String TWITTER_SECRET_KEY = "ADD YOUR APP SECRET KEY HERE";

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list_main = (ListView)findViewById(R.id.list_main);
mHandler = new Handler();
mTwitter = new TwitterApp(MainActivity.this,TWITTER_CONSUMER_KEY,TWITTER_SECRET_KEY);
LoadTwitter();
}

private void LoadTwitter() {
mTwitter.setListener(mTwLoginDialogListener); 
if (mTwitter.hasAccessToken()) 
{

postMsgOnTwitter("");

}else 
{
mTwitter.authorize();
}
}
public TwDialogListener mTwLoginDialogListener = new TwDialogListener() 
{
@Override
        public void onComplete(String value) 
        {
postMsgOnTwitter("");

        }

@Override
        public void onError(String value) 
        {
showToast("Twitter login failed");
            mTwitter.resetAccessToken();
        }


    };

  private void postMsgOnTwitter(final String msg)
   {
    showProgressDialog("loading..");
    try 
{

Log.e(TAG, "Id>>>"+mTwitter.getUserId()+"<<UserName>>"+ mTwitter.getUserScreenName());
hideProgressDialog();

     showToast("Login successfully.");
     showToast("Id>>>"+mTwitter.getUserId()+"<<UserName>>"+ mTwitter.getUserScreenName());
      userScreenName  = mTwitter.getUserScreenName();
      user_id = mTwitter.getUserId();
  
       loadApi();

catch (Exception e) 
{
hideProgressDialog();
showToast("Failed to Login");
e.printStackTrace();
}

}
  private void loadApi() {
new ListLoad().execute();
  }
 class ListLoad extends AsyncTask<String, String, String>{
protected void onPreExecute() {
           super.onPreExecute();
           pDialog = new ProgressDialog(MainActivity.this);
           pDialog.setMessage("Loading Friends..");
         pDialog.setIndeterminate(false);
         pDialog.setCancelable(true);
         pDialog.show();
       }

@Override
protected String doInBackground(String... arg0) {

 ShowList =  mTwitter.getFriendList(userScreenName,user_id);
             
return null;
}
protected void onPostExecute(String file_url) {
try {

         pDialog.dismiss();
      list_main.setAdapter(null);
      list_main.setAdapter(new TwitterAdapter(MainActivity.this,ShowList));
} catch (Exception e) {
e.printStackTrace();
}
      }
}
private void showToast(final  String msg) {
// TODO Auto-generated method stub
  mHandler.post(new Runnable() 
{
@Override
public void run() 
{
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
}

public void showProgressDialog(String msg)
{
  runOnUiThread(new RunShowLoader(msg, false));
}
class RunShowLoader implements Runnable
{
private String strMsg;
private boolean isCancalable;

public RunShowLoader(String strMsg, boolean isCancalable) 
{
this.strMsg = strMsg;
this.isCancalable = isCancalable;
}

@Override
public void run() 
{
try
{
if(progressdialog == null ||(progressdialog != null && !progressdialog.isShowing()))
{
progressdialog = ProgressDialog.show(MainActivity.this, "", strMsg);
progressdialog.setCancelable(isCancalable);
}
}
catch(Exception e)
{
progressdialog = null;
e.printStackTrace();
}
}
}

/** For hiding progress dialog **/
public void hideProgressDialog()
{
runOnUiThread(new Runnable()
{
@Override
public void run() 
{
try
{
if(progressdialog != null && progressdialog.isShowing())
{
progressdialog.dismiss();
}
progressdialog = null;
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
}


}


->Now I have used an adapter to show data in custom list view the xml for single list item is as following .I have named it :  friend_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_gravity="center_horizontal"
              android:orientation="horizontal">

    <ImageView
            android:id="@+id/icon_friendlistitem"
            android:src="@drawable/ic_launcher"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_margin="3dp" />
    <LinearLayout
            android:orientation="vertical"
            android:layout_gravity="center_vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp" >
        <TextView
                android:id="@+id/name_friendlistitem"
                android:text="test"
                android:textColor="#333"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18sp" />
     
    </LinearLayout>
</LinearLayout>

-> Last step is to make adapter class to show the following list.I have named it TwitterAdapter.java

package com.twitter.follower;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.twitter.follower.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;

public class TwitterAdapter extends BaseAdapter{
private ImageLoader imageLoader  = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder()
 
.showImageOnLoading(R.drawable.default_profile_3_bigger)
.showImageForEmptyUri(R.drawable.default_profile_3_bigger)
.showImageOnFail(R.drawable.default_profile_3_bigger)
.cacheInMemory(true)
.cacheOnDisc(true)
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
.bitmapConfig(Bitmap.Config.ARGB_8888)
.displayer(new FadeInBitmapDisplayer(300))
.build();
private class ViewHolder {
public RelativeLayout lnCover;
public TextView tvName;
public TextView tvTitle,txt_before;
public ImageView img_album;
public Button btn_after;
}
private LayoutInflater mLayoutInflater = null;
private Activity activity;
private ViewHolder holder;
private String name,cat_id,str_flag="";
ArrayList<HashMap<String,String>>  Show;
public TwitterAdapter(Activity activity2,
ArrayList<HashMap<String, String>> showList) {
this.activity = activity2;
this.Show = showList;
mLayoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader.init(ImageLoaderConfiguration.createDefault(activity));
  
}

@Override
public int getCount() {
return Show.size();
}

@Override
public Object getItem(int position) {
return Show.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.friend_list_item, null);

holder = new ViewHolder();
holder.tvTitle= (TextView) convertView.findViewById(R.id.name_friendlistitem);
holder.img_album = (ImageView)convertView.findViewById(R.id.icon_friendlistitem);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvTitle.setText(Show.get(position).get("friend_name")); 
      imageLoader.displayImage(Show.get(position).get("friend_photo"),holder.img_album, options);

return convertView;
}

}

->Now you have to add following permission in your menifest file: 

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

->Above is the all coding for fetching following list from twitter using twitter4j.You can easily paste this code in your app .Please add this code and share your experiences with me about this code .

->You can add the working example of this project in your google drive from here: 

FetchTwitterFollower

->Hope this will helpful for you.











Advanced Kotlin Coroutines : Introduction

 Hi,  Today I am unwraping the topic in Kotin world i.e. Coroutine . If you want to get started with Kotlin coroutine and ease your daily de...