OffLine Data Display in Android using webservice
===============Dependency===============
==================App Config==========
compile 'com.squareup.retrofit:retrofit:1.9.0'compile 'com.squareup.retrofit2:retrofit:2.2.0'compile 'com.squareup.retrofit2:converter-gson:2.2.0'compile 'com.android.support:design:25.3.1'compile 'com.android.support:recyclerview-v7:25.3.1'
===============Main Activity XML===============<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:id="@+id/snek_status_language" tools:context="com.example.hp.offline_retrofit_getdata_display.MainActivity"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rv_1"> </android.support.v7.widget.RecyclerView> </RelativeLayout>
===============Main Activity JAVA===============
package com.example.hp.offline_retrofit_getdata_display; import android.accounts.Account; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.example.hp.offline_retrofit_getdata_display.Adepter.RV_lang_adepter; import com.example.hp.offline_retrofit_getdata_display.Model.Sqllite_model_festival; import com.example.hp.offline_retrofit_getdata_display.Model.model_language; import com.example.hp.offline_retrofit_getdata_display.helper.Appconf; import com.example.hp.offline_retrofit_getdata_display.helper.DatabaseHelpher; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import retrofit.Callback; import retrofit.RestAdapter; import retrofit.RetrofitError; import retrofit.client.Response; public class MainActivity extends AppCompatActivity { private RecyclerView rv_1; String BASE_URL = "http://sktechnocast.com/"; private DatabaseHelpher dbhalper; private RelativeLayout snek_status_all; private boolean isConnected = false; private model_language display; private RV_lang_adepter mActiv; public URL url; private BroadcastReceiver myReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { isNetworkAvailable(context); } }; private Bitmap image_bitmap; private boolean isNetworkAvailable(Context context) { snek_status_all = (RelativeLayout) findViewById(R.id.snek_status_language); ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { if (!isConnected) { getdata(); isConnected = true; } return true; } } } } mActiv = new RV_lang_adepter(dbhalper.getDataFromDB()); rv_1.setAdapter(mActiv); Snackbar snackbar = Snackbar.make(snek_status_all, "No internet connection!", Snackbar.LENGTH_LONG); View sbView = snackbar.getView(); TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); textView.setTextColor(Color.YELLOW); snackbar.show(); isConnected = false; return false; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter filter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); getApplicationContext().registerReceiver(myReceiver, filter); dbhalper = new DatabaseHelpher(MainActivity.this); rv_1 = (RecyclerView) findViewById(R.id.rv_1); GridLayoutManager aaa = new GridLayoutManager(getApplicationContext(), 1); rv_1.setLayoutManager(aaa); rv_1.setItemAnimator(new DefaultItemAnimator()); } public void getdata() { RestAdapter adapter = new RestAdapter.Builder().setEndpoint(BASE_URL).build(); Appconf.status_lang api = adapter.create(Appconf.status_lang.class); api.redadada( new Callback<model_language>() { @Override public void success(model_language model_language, Response response) { if (model_language.getSuccess() == "true") { display = model_language; ArrayList<Sqllite_model_festival> sql_arraydata = new ArrayList<Sqllite_model_festival>(); dbhalper.deleteall(); for (int i = 0; i < display.getGetresult_array().size(); i++) { String category_id = display.getGetresult_array().get(i).getCategory_id(); String sub_category_name = display.getGetresult_array().get(i).getCategory_name(); String sub_tmp_image = display.getGetresult_array().get(i).getTmp_image(); try { url = new URL(sub_tmp_image); image_bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream()); } catch(IOException e) { System.out.println(e); } // Toast.makeText(MainActivity.this, "a image"+sub_tmp_image, Toast.LENGTH_SHORT).show(); Toast.makeText(MainActivity.this, "a bitmapdata "+sub_tmp_image, Toast.LENGTH_SHORT).show(); Sqllite_model_festival data_insert_values_model = new Sqllite_model_festival(); data_insert_values_model.setSub_category_id(category_id); data_insert_values_model.setSub_category_name(sub_category_name); // data_insert_values_model.setSub_category_name(sub_tmp_image); sql_arraydata.add(data_insert_values_model); dbhalper.InsertDb_festival(data_insert_values_model); } mActiv = new RV_lang_adepter(sql_arraydata); rv_1.setAdapter(mActiv); } else { Toast.makeText(MainActivity.this, "not Found", Toast.LENGTH_SHORT).show(); } } @Override public void failure(RetrofitError error) { } } ); } /* byte[] logoImage = getLogoImage(IMAGEURL); private byte[] getLogoImage(String url){ try { URL imageUrl = new URL(url); URLConnection ucon = imageUrl.openConnection(); InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(500); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } return baf.toByteArray(); } catch (Exception e) { Log.d("ImageManager", "Error: " + e.toString()); } return null; } public void insertUser(){ SQLiteDatabase db = dbHelper.getWritableDatabase(); String delSql = "DELETE FROM ACCOUNTS"; SQLiteStatement delStmt = db.compileStatement(delSql); delStmt.execute(); String sql = "INSERT INTO ACCOUNTS (account_id,account_name,account_image) VALUES(?,?,?)"; SQLiteStatement insertStmt = db.compileStatement(sql); insertStmt.clearBindings(); insertStmt.bindString(1, Integer.toString(this.accId)); insertStmt.bindString(2,this.accName); insertStmt.bindBlob(3, this.accImage); insertStmt.executeInsert(); db.close(); } public Account getCurrentAccount() { SQLiteDatabase db = dbHelper.getWritableDatabase(); String sql = "SELECT * FROM ACCOUNTS"; Cursor cursor = db.rawQuery(sql, new String[] {}); if(cursor.moveToFirst()){ this.accId = cursor.getInt(0); this.accName = cursor.getString(1); this.accImage = cursor.getBlob(2); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } db.close(); if(cursor.getCount() == 0){ return null; } else { return this; } } logoImage.setImageBitmap(BitmapFactory.decodeByteArray( currentAccount.accImage.length))}*/}
===============Custome Adepter===============
package com.example.hp.offline_retrofit_getdata_display.Adepter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import com.example.hp.offline_retrofit_getdata_display.Model.Sqllite_model_festival; import com.example.hp.offline_retrofit_getdata_display.R; import java.util.ArrayList; /** * Created by hp on 6/23/2018. */public class RV_lang_adepter extends RecyclerView.Adapter<RV_lang_adepter.MyHolderView> { private View view; private Context context; // (1)----------------- this is mod_language is ony used model class but sqllite userd then this model calls array used // private model_language Mod_lang; private ArrayList<Sqllite_model_festival> Mod_lang; @Override public MyHolderView onCreateViewHolder(ViewGroup parent, int viewType) { view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_festival,parent,false); context =view.getContext(); return new MyHolderView(view); } // public RV_lang_adepter(model_language mm){ //(2)---------------- this is model used for sqllite aray formet----------- then used another upervadu use thase public RV_lang_adepter(ArrayList<Sqllite_model_festival> mm){ this.Mod_lang = mm; } @Override public void onBindViewHolder(RV_lang_adepter.MyHolderView holder, int position) { // holder.txt_name.setText(Mod_lang.getGetresult_array().get(position).getCategory_name()); //(3)--------------------- this is getGetresult_array used nai thay because sql no array call thse so not used holder.txt_name.setText(Mod_lang.get(position).getSub_category_name()); // byte[] image = cursor.getBlob(1); Toast.makeText(context, "image"+Mod_lang.get(position).getSub_tmp_image(), Toast.LENGTH_SHORT).show(); } @Override public int getItemCount() { return Mod_lang.size() ; } public class MyHolderView extends RecyclerView.ViewHolder { private final TextView txt_name; public MyHolderView(View view) { super(view); txt_name = (TextView) view.findViewById(R.id.txt_name); } } }
=============== Model Class url===============
package com.example.hp.offline_retrofit_getdata_display.Model; import com.google.gson.annotations.SerializedName; import java.util.ArrayList; /** * Created by hp on 6/23/2018. */public class model_language { @SerializedName("status") private String success; public String getSuccess() { return success; } public void setSuccess(String success) { this.success = success; } @SerializedName("data") private ArrayList<language_array> getresult_array = new ArrayList<>(); public ArrayList<language_array> getGetresult_array() { return getresult_array; } public void setGetresult_array(ArrayList<language_array> getresult_array) { this.getresult_array = getresult_array; } public static class language_array{ @SerializedName("category_id") private String category_id; @SerializedName("sub_category_name") private String category_name; @SerializedName("tmp_image") private String tmp_image; public String getTmp_image() { return tmp_image; } public void setTmp_image(String tmp_image) { this.tmp_image = tmp_image; } public String getCategory_id() { return category_id; } public void setCategory_id(String category_id) { this.category_id = category_id; } public String getCategory_name() { return category_name; } public void setCategory_name(String category_name) { this.category_name = category_name; } } }
=============== Model Class Sql===============
package com.example.hp.offline_retrofit_getdata_display.Model; /** * Created by hp on 6/23/2018. */public class Sqllite_model_festival { private String sub_category_id; private String sub_category_name; public String getSub_tmp_image() { return sub_tmp_image; } public void setSub_tmp_image(String sub_tmp_image) { this.sub_tmp_image = sub_tmp_image; } private String sub_tmp_image; public String getSub_category_id() { return sub_category_id; } public void setSub_category_id(String sub_category_id) { this.sub_category_id = sub_category_id; } public String getSub_category_name() { return sub_category_name; } public void setSub_category_name(String sub_category_name) { this.sub_category_name = sub_category_name; } }
=============== DatabaseHelper===============
package com.example.hp.offline_retrofit_getdata_display.helper; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import android.widget.Toast; import com.example.hp.offline_retrofit_getdata_display.Model.Sqllite_model_festival; import java.util.ArrayList; /** * Created by hp on 6/23/2018. */ public class DatabaseHelpher extends SQLiteOpenHelper { private static final String DATABASE_NAME="gsm"; private static final int DATABASE_VERSION = 2; private static final String GSM_TABLE = "data"; private static final String TABLE_FESTIVAL = "dataa"; private static final String FESTIVAL_TABLE = "create table "+TABLE_FESTIVAL +"(id INTEGER primary key AUTOINCREMENT,sub_category_id INTEGER,sub_category_name TEXT)"; // private static final String STU_TABLE = "create table "+GSM_TABLE +"(id INTEGER primary key AUTOINCREMENT,id_lang INTEGER,name_lang TEXT)"; Context context; public DatabaseHelpher(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); this.context = context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(FESTIVAL_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int i, int i1) { db.execSQL("DROP TABLE IF EXISTS" + TABLE_FESTIVAL); onCreate(db); } public void InsertDb_festival(Sqllite_model_festival data_insert_values_model) { Log.d("insert", "before insert"); SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("sub_category_id",data_insert_values_model.getSub_category_id()); values.put("sub_category_name",data_insert_values_model.getSub_category_name()); // values.put("sub_tmp_image",data_insert_values_model.getSub_tmp_image()); db.insert(TABLE_FESTIVAL,null,values); db.close(); Toast.makeText(context, "insert value", Toast.LENGTH_LONG); } // -------- DELETE ALL ----------------- public void deleteall(){ SQLiteDatabase db = this.getWritableDatabase(); db.execSQL("DELETE FROM "+ TABLE_FESTIVAL); db.close(); } /* *//* Retrive data from database *//* public ArrayList<Sqllite_model_festival> getDataFromDB(){ ArrayList<Sqllite_model_festival> modelList = new ArrayList<Sqllite_model_festival>(); String query = "select* from "+TABLE_FESTIVAL ; SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(query,null); if (cursor.moveToFirst()){ do { Sqllite_model_festival model = new Sqllite_model_festival(); //model.setId(cursor.getInt(0)); model.setSub_category_id(cursor.getString(1)); model.setSub_category_name(cursor.getString(2)); modelList.add(model); }while (cursor.moveToNext()); } Log.d("student data", modelList.toString()); return modelList; }*/ public ArrayList<Sqllite_model_festival>getDataFromDB(){ ArrayList<Sqllite_model_festival>sql_qrray = new ArrayList<Sqllite_model_festival>(); String quary ="select * from "+TABLE_FESTIVAL; SQLiteDatabase db =this.getWritableDatabase(); Cursor cursor = db.rawQuery(quary,null); if(cursor.moveToFirst()){ do { Sqllite_model_festival model_obj = new Sqllite_model_festival(); model_obj.setSub_category_id(cursor.getString(1)); model_obj.setSub_category_name(cursor.getString(2)); // model_obj.setSub_tmp_image(cursor.getString(3)); sql_qrray.add(model_obj); } while (cursor.moveToNext()); } Log.d("student data", sql_qrray.toString()); return sql_qrray; } }
==================App Config==========
package com.example.hp.offline_retrofit_getdata_display.helper; import com.example.hp.offline_retrofit_getdata_display.Model.model_language; import retrofit.Callback; import retrofit.http.GET; /** * Created by hp on 6/23/2018. */public class Appconf { public interface status_lang{ @GET("/android/status/offline_getdata_recyclerview.php") void redadada(Callback<model_language> callback); } }
Comments
Post a Comment