ListView in android real time
ListView (Real time):
Step 1 : create DrugsFragment fragment.
Step 2 : create listview view in layout_drugs_fragment.xml.
Step 3 : create Adapter.
Step 4 : create inflator layout (drugs_adapter_list_item.xml)
Step 5: add useful files into your android studio for ServiceIntegration for Retrofit.
Step 6: run the program and watch the output.
Step 1:
public class DrugsFragment extends Fragment {
ListView mListView;
List<DrugsModel> drugsModelList = new ArrayList<>();
DrugsAdapter drugsAdapter;
Util mUtil;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_drugs_fragment, container, false);
mUtil = new Util();
mUtil.getSharedpreferences(getActivity());
initViews(view);
getDrugs();
return view;
}
private void initViews(View view) {
mListView = (ListView) view.findViewById(R.id.drugs_fragment_listview);
}
public void callToast(String msg) {
Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show();
}
private void getDrugs() {
if (mUtil.isNetworkAvailable(getActivity())) {
mUtil.showProgressDialog(getActivity());
mUtil.getBaseClassService(getActivity(), "").getDrugs(new Callback<JsonObject>() {
@Override
public void success(JsonObject jsonObject, Response response) {
if (jsonObject.get(StringConstants.STATUS).getAsString().equalsIgnoreCase("sucess")) {
JsonArray asJsonArray = jsonObject.getAsJsonArray(StringConstants.DATA);
for (int i = 0; i < asJsonArray.size(); i++) {
JsonObject object = asJsonArray.get(i).getAsJsonObject();
DrugsModel drugsModel = new DrugsModel();
drugsModel.setDrugName(object.get("company_name").getAsString());
drugsModel.setDescription(object.get("description").getAsString());
drugsModel.setImageUrl(object.get("image").getAsString());
drugsModelList.add(drugsModel);
}
drugsAdapter = new DrugsAdapter(getActivity(), drugsModelList);
mListView.setAdapter(drugsAdapter);
mUtil.dismissDialog();
} else {
mUtil.dismissDialog();
try {
Toast.makeText(getActivity(), jsonObject.get("errorMessages").getAsString(), Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void failure(RetrofitError error) {
mUtil.dismissDialog();
Log.e("Lokesh", error.toString());
mUtil.serviceCallFailermsg(error,getActivity());
}
});
}
}
}
layout_drugs_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/drugs_fragment_listview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</RelativeLayout>
Adapter:
public class DrugsAdapter extends BaseAdapter {
LayoutInflater inflater;
Context mContext;
List<DrugsModel> drugsModelList /*= new ArrayList<>()*/;
private ImageLoader mImageLoader;
private DisplayImageOptions logooptions;
DoctorAppApplication application;
Util mUtil;
// DoctorAppApplication application;
public DrugsAdapter(Activity activity, List<DrugsModel> drugsModelList) {
this.mContext = activity;
this.drugsModelList = drugsModelList;
mUtil = new Util();
application = (DoctorAppApplication) activity.getApplication();
mImageLoader = application.rounderCornerImageLoader;
}
@Override
public int getCount() {
return drugsModelList.size();
}
@Override
public Object getItem(int i) {
return drugsModelList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup viewGroup) {
Holder holder = new Holder();
if (inflater == null){
inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
if (convertView == null) {
convertView = inflater.inflate(R.layout.drugs_adapter_list_item, null);
convertView.setTag(holder);
}else {
holder = (Holder) convertView.getTag();
}
// holder.mUsername = (TextView)convertView.findViewById(R.id.drugs_adapter_name_tv);
holder.tvName = (TextView) convertView.findViewById(R.id.drugs_adapter_name_tv);
holder.tvDescription = (TextView) convertView.findViewById(R.id.drugs_adapter_drugs_description);
holder.ivDrugImage = (ImageView) convertView.findViewById(R.id.drugs_adapter_imageview);
DrugsModel drugsModel = drugsModelList.get(i);
// holder.mUsername.setText(drugsModel.getDrugName());
holder.tvName.setText(drugsModel.getDrugName());
holder.tvDescription.setText(drugsModel.getDescription());
mImageLoader.displayImage(StringConstants.IMAGE_BASE_URL +"drugs/"+ drugsModel.getImageUrl(), holder.ivDrugImage);
Log.e("Lokesh","image url in drugs"+StringConstants.IMAGE_BASE_URL + "drugs/"+ drugsModel.getImageUrl());
return convertView;
}
public class Holder{
private TextView mUsername,tvName,tvDescription;
private ImageView ivDrugImage;
}
}
drugs_adapter_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/unselected"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/margin_90"
android:gravity="center_vertical"
android:layout_margin="@dimen/bp_margin_5"
android:elevation="@dimen/bp_margin_5"
android:background="@drawable/list_item_padding">
<ImageView
android:id="@+id/drugs_adapter_imageview"
android:layout_width="@dimen/margin_100"
android:layout_height="@dimen/margin_100"
android:padding="@dimen/bp_margin_10"
android:scaleType="fitXY"
tools:src="@drawable/editprofile" />
<View
android:id="@+id/vertical_view"
android:layout_width="@dimen/bp_margin_1"
android:layout_height="@dimen/margin_110"
android:layout_toRightOf="@+id/drugs_adapter_imageview"
android:background="@color/hashtintedittext" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/bp_margin_7"
android:layout_toRightOf="@+id/vertical_view">
<TextView
android:id="@+id/drugs_adapter_name_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/bp_margin_3"
android:text="@string/name" />
<!--<TextView-->
<!--android:id="@+id/drugs_adapter_dosage_tv"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_below="@+id/drugs_adapter_name_tv"-->
<!--android:padding="@dimen/bp_margin_3"-->
<!--android:text="@string/dosage"-->
<!--android:visibility="invisible"/>-->
<TextView
android:id="@+id/drugs_adapter_drugs_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/drugs_adapter_name_tv"
android:padding="@dimen/bp_margin_3"
android:text="@string/description" />
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
Useful Files for Retrofit:
StringConstansts.java
public class StringConstants {
public static final String BASE_CLASSES_URL = "http://drapp.sciensdemos.in/index.php/doctorapp_services/";
public static final String DEV = "dev";
public static final String STATUS = "status";
public static String errorMessage = "errorMessage";
public static String message = "message";
public static String LAUNCHERIMAGEFROMDRIVE = "https://drive.google.com/open?id=0B-avwtCVeNFOMjRrQnBJVHdNQ2s";
public static String DATA = "data";
public static String FIRSTNAME = "firstname";
public static String LASTNAME = "lastname";
public static String EMAIL = "email";
public static String USERID = "id";
public static String MOBILENUMBER = "mobilenumber";
public static String IMAGE_BASE_URL= "http://drapp.sciensdemos.in/assets/uploads/";
}
Util.java
public class Util {
private static final String MyPREFERENCES = "MyPrefs";
private static SharedPreferences sharedpreferences;
MaterialDialog ringProgressDialog = null;
public static SharedPreferences getSharedpreferences(Context context) {
if (sharedpreferences == null)
sharedpreferences = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
return sharedpreferences;
}
public static void setString(String key, String value) {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(key, value);
editor.commit();
}
public static String getString(String key) {
return sharedpreferences.getString(key, "");
}
public static void setBoolean(String key, boolean value) {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(key, value);
editor.commit();
}
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info == null) return false;
NetworkInfo.State network = info.getState();
return (network == NetworkInfo.State.CONNECTED || network == NetworkInfo.State.CONNECTING);
}
public void showProgressDialog(final Context ctx) {
if (ringProgressDialog == null) {
ringProgressDialog = new MaterialDialog.Builder(ctx)
.title(ctx.getResources().getString(R.string.app_name))
.content("Please wait.... ")
.progress(true, 0)
.theme(Theme.LIGHT)
.cancelable(false)
.show();
ringProgressDialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
ProgressBar v = (ProgressBar) ringProgressDialog.findViewById(android.R.id.progress);
v.getIndeterminateDrawable().setColorFilter(ctx.getResources().getColor(R.color.colorPrimary),
android.graphics.PorterDuff.Mode.MULTIPLY);
}
});
}
}
public void dismissDialog() {
if (ringProgressDialog != null) {
if (ringProgressDialog.isShowing()) {
ringProgressDialog.dismiss();
ringProgressDialog = null;
}
}
}
public ServiceOperations getBaseClassService(Context ctx, String url) {
return new RetroHelper().getAdapter(ctx, url).create(ServiceOperations.class);
}
public void serviceCallFailermsg(RetrofitError error, Context mcontext) {
if (error != null) {
try {
String body = new String(((TypedByteArray) error.getResponse().getBody()).getBytes());
Log.v("failure", body.toString());
JsonObject errorJson = new Gson().fromJson(body, JsonObject.class);
singelButtonAlertDialog(mcontext, mcontext.getResources().getString(R.string.app_name), errorJson.get(StringConstants.message).getAsString());
} catch (Exception e) {
singelButtonAlertDialog(mcontext, mcontext.getResources().getString(R.string.app_name), mcontext.getString(R.string.errormessage));
}
} else {
singelButtonAlertDialog(mcontext, mcontext.getResources().getString(R.string.app_name), mcontext.getString(R.string.errormessage));
}
}
}
RetroHelper.java
public class RetroHelper {
public static String mEnvironment = StringConstants.DEV;
private static Context mContext;
public static RestAdapter getAdapter(Context ctx, String serverUrl) {
mContext=ctx;
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(StringConstants.BASE_CLASSES_URL+serverUrl)
.setLogLevel(RestAdapter.LogLevel.FULL).setLog(new RestAdapter.Log() {
@Override
public void log(String msg) {
Log.i("Retro Helper", msg);
}
})
.setClient(new OkClient(new OkHttpClient()))
.build();
return restAdapter;
}
}
ServiceOperations.java
public interface ServiceOperations {
@GET("/drug_data")
void getDrugs(Callback<JsonObject> callback);
}
Output: