Asumsikan kami harus mengirim beberapa informasi dari aplikasi ke server web Anda dan internet tidak tersedia di perangkat pada waktu tertentu. Jadi alih-alih memberikan kesalahan kepada pengguna bahwa internet tidak tersedia, kami dapat menyimpan data ke SQLite dan mengirimkannya nanti secara otomatis saat internet tersedia Show
Kami memerlukan izin berikut, jadi pertama-tama tambahkan ini ke AndroidManifest
Menambahkan Dependensi _
tulis kode berikut. jika tidak, unduh kode. Unduh Tautan
Tag sudah ada dengan nama cabang yang disediakan. Banyak perintah Git menerima nama tag dan cabang, jadi membuat cabang ini dapat menyebabkan perilaku yang tidak diharapkan. Anda yakin ingin membuat cabang ini? Mari belajar Android Sync SQLite Database with Server. Asumsikan kami harus mengirim beberapa informasi dari aplikasi ke server web Anda dan internet tidak tersedia di perangkat pada waktu tertentu. Jadi alih-alih memberikan kesalahan kepada pengguna bahwa internet tidak tersedia, kami dapat menyimpan data ke SQLite dan mengirimkannya nanti secara otomatis saat internet tersedia. Dan inilah yang akan kita pelajari di Android Sync SQLite Database with Server Tutorial ini Isi Basis Data Sqlite Sinkronisasi Android dengan Server Demo
Membuat Layanan Web dan Database MySQLMembuat Basis Data
Membuat Layanan WebMembuat Skrip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
/* * Konstanta Basis Data * Pastikan Anda memasukkan nilai sesuai dengan database Anda di sini */ definisikan ( 'DB_HOST' , 'localhost'); definisikan ( 'DB_USERNAME' , 'root'); definisikan ( 'DB_PASSWORD' , ''<); tentukan ( 'DB_NAME' , 'android');
//Menghubungkan ke database $koneksi = baru mysqli ( DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
//memeriksa koneksi berhasil jika ( $koneksi - >connect_error) { mati ( "Koneksi gagal. " . $koneksi - >connect_error); }
//membuat array untuk menyimpan respon $response = array ();
//jika ada permintaan posting lanjutkan jika ( $_SERVER [ 'REQUEST_METHOD'<]=='POST'){ //mendapatkan nama dari permintaan $nama = $_POST [ 'nama'];
//membuat pernyataan untuk disisipkan ke database $stmt = $koneksi - >prepare("INSERT INTO names (name) VALUES (?)"); // mengikat parameter ke pernyataan $stmt - >bind_param ( "s", $name); //jika data berhasil disisipkan jika ( $stmt - >execute()){ // membuat respons sukses $response [ 'kesalahan' ] =< false; $response [ 'message' ] =< 'Name saved successfully'; } lain { //jika tidak membuat respons kegagalan $response [ 'kesalahan' ] =< true; $response [ 'message' ] =< 'Please try later'; } } lain { $response [ 'kesalahan' ] =< true; $response [ 'message' ] =< "Invalid request"; }
//menampilkan data dalam format json echo json_encode ( $response );
Skrip Pengujian
Basis Data SQLite Sinkronisasi Android dengan ServerMembuat Proyek Android
Menambahkan Izin
1 2 3 4
<menggunakan - izin android:nama = "android. izin. INTERNET" / > <menggunakan - izin android:nama = "android. izin. ACCESS_NETWORK_STATE" / >
Menambahkan Dependensi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
dependensi { kompilasi fileTree ( dir: 'libs' , sertakan . [ '*. jar' ]) androidTestCompile ( 'com. android. dukung. tes. espreso. espresso-core. 2. 2. 2' , { kecualikan grup . 'com. android. dukungan' , modul . 'dukungan-anotasi' }) kompilasi 'com. android. dukung. appcompat-v7. 25. 0. 1'
//tambahkan baris ini kompilasi 'com. android. tembakan. tembakan. 1. 0. 0'
testCompile 'junit. juni. 4. 12' }
Menangani Operasi SQLite
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
paket bersih. pengkodean yang disederhanakan. androidmysqlsync ;
impor android. konten. NilaiKonten ; impor android. konten. Konteks ; impor android. database. Kursor ; impor android. database. sqlite. SQLiteDatabase ; impor android. database. sqlite. SQLiteOpenHelper ;
/** * Dibuat oleh Belal pada 27/1/2017 */ publik kelas DatabaseHelper meluas SQLiteOpenHelper {
//Konstanta untuk nama Database, nama tabel, dan nama kolom publik statis final String DB_NAME = "NamesDB"; publik statis final String TABLE_NAME = "names"; publik statis final String COLUMN_ID = "id"; publik statis final String COLUMN_NAME = "name"; publik statis final String COLUMN_STATUS = "status";
//versi database pribadi statis final int DB_VERSION = 1;
//Konstruktor publik DatabaseHelper ( Konteks context) { super ( konteks , DB_NAME, null, DB_VERSION); }
//membuat database @Ganti publik void onCreate ( SQLiteDatabase db) { String sql = "BUAT TABEL" + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " VARCHAR, " + COLUMN_STATUS + " TINYINT);" ; db. execSQL ( sql ); }
//memperbarui database @Ganti publik tidak berlaku onUpgrade ( SQLiteDatabase db, int oldVersion, int newVersion) { String sql = "JATUH TABEL JIKA ADA Orang; db. execSQL ( sql ); dibuat ( db ); }
/* * Metode ini mengambil dua argumen * yang pertama adalah nama yang akan disimpan * yang kedua adalah status * 0 berarti nama disinkronkan dengan server * 1 artinya nama tidak sinkron dengan server * */ publik boolean addName ( String name, int status) { SQLiteDatabase db = ini.getWritableDatabase (); NilaiKonten NilaiKonten = baru ContentValues();
nilai konten. cantumkan ( COLUMN_NAME , nama); nilai konten. masukkan ( COLUMN_STATUS , status);
db. masukkan ( TABLE_NAME , null, contentValues); db. tutup (); kembalikan benar ; }
/* * Metode ini mengambil dua argumen * yang pertama adalah id dari nama yang mana * kita harus memperbarui status sinkronisasi * dan yang kedua adalah status yang akan diubah * */ publik boolean updateNameStatus ( int id, int status) { SQLiteDatabase db = ini.getWritableDatabase (); NilaiKonten NilaiKonten = baru ContentValues(); nilai konten. masukkan ( COLUMN_STATUS , status); db. perbarui ( TABLE_NAME , contentValues, COLUMN_ID + "=" + id, null); db. tutup (); kembalikan benar ; }
/* * metode ini akan memberi kita semua nama yang disimpan di sqlite * */ publik Kursor getNames () { SQLiteDatabase db = ini.getReadableDatabase (); String sql = "SELECT * FROM "< + TABLE_NAME + " ORDER BY " + COLUMN_ID + " ASC;"; Kursor c = db.rawQuery ( sql , null); kembalikan c ; }
/* * metode ini untuk mendapatkan semua nama yang tidak disinkronkan * agar kita bisa sinkronisasi dengan database * */ publik Kursor getUnsyncedNames () { SQLiteDatabase db = ini.getReadableDatabase (); String sql = "SELECT * FROM "< + TABLE_NAME + " WHERE " + COLUMN_STATUS + " = 0;"; Kursor c = db.rawQuery ( sql , null); kembalikan c ; } }
Menangani Antrean Permintaan Voli
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
paket bersih. pengkodean yang disederhanakan. androidmysqlsync ;
impor android. konten. Konteks ; impor android. grafik. Bitmap ; impor android. dukungan. v4. bermanfaat. LruCache ;
impor com. android. voli. Permintaan ; impor com. android. voli. Antrian Permintaan ; impor com. android. voli. kotak alat. ImageLoader ; impor com. android. voli. kotak alat. Voli ;
/** * Dibuat oleh Belal pada 21/09/16 */ publik kelas VolleySingleton {
pribadi statis VolleySingleton mInstance; pribadi Antrian Permintaan mRequestQueue ; pribadi statis Konteks mCtx;
pribadi VolleySingleton ( Konteks context) { mCtx = konteks ; mRequestQueue = getRequestQueue ();
}
publik statis disinkronkan VolleySingleton getInstance(Context context) { jika ( mInstance == null) { mInstance = baru VolleySingleton(context); } kembalikan mInstance ; }
publik RequestQueue getRequestQueue () { jika ( mRequestQueue == null) { // getApplicationContext() adalah kuncinya, mencegah Anda membocorkan // Aktivitas atau BroadcastReceiver jika seseorang meneruskannya. mRequestQueue = Volley. newRequestQueue ( mCtx. getApplicationContext ()); } return mRequestQueue ; }
publik getRequestQueue (). tambahkan ( req ); }
}
Antarmuka BangunanAktifitas utama
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
xml versi="1. 0"enkode="utf-8"?>xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns. android = "http. // skema. android. com/apk/res/android" xmlns. alat = "http. // skema. android. com/tools" android. adalah = "@+id/activity_main" android. layout_width = "match_parent" android. layout_height = "match_parent" android. orientasi = "vertikal" android. paddingBottom = "@dimen/activity_vertical_margin" android. paddingLeft = "@dimen/activity_horizontal_margin" android. paddingRight = "@dimen/activity_horizontal_margin" android. paddingTop = "@dimen/activity_vertical_margin" alat. konteks = "net. kode sederhana. androidmysqlsync. MainActivity">
<LinearLayout android. layout_width = "match_parent" android. tinggi_tata letak = "wrap_content" android. orientasi = "horizontal">
<EditTeks android. adalah = "@+id/editTextName" android. layout_width = "match_parent" android. tinggi_tata letak = "wrap_content" android. layout_weight = "3" android. petunjuk = "Masukkan nama" / >
<Tombol android. adalah = "@+id/buttonSave" android. lebar_tata letak = "wrap_content" android. tinggi_tata letak = "wrap_content" android. layout_weight = "1" android. teks = "Simpan" / >
< / LinearLayout>
<ListView android. adalah = "@+id/listView Names" android. layout_width = "match_parent" android. layout_height = "wrap_content"></ListView>
< / LinearLayout>
Tampilan Daftar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
xml versi="1. 0"enkode="utf-8"?>xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns. android = "http. // skema. android. com/apk/res/android" android. padding = "@dimen/activity_horizontal_margin" android. layout_width = "match_parent" android:layout_height = "match_parent">
<TextView android. teks = "Nama" android. layout_alignParentLeft = "true" android. adalah = "@+id/textViewName" android. lebar_tata letak = "wrap_content" android. layout_height = "wrap_content" / >
<ImageView android. latar belakang = "@drawable/success" android. layout_alignParentRight = "true" android. adalah = "@+id/imageViewStatus" android. lebar_tata letak = "wrap_content" android. layout_height = "wrap_content" / >
< / RelativeLayout>
[unduh id=”4043″]
Tampilan Daftar BangunanKelas Model
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
paket bersih. pengkodean yang disederhanakan. androidmysqlsync ;
/** * Dibuat oleh Belal pada 27/1/2017 */
publik kelas Nama { pribadi String nama ; pribadi int status ;
publik Nama ( String name, int status) { ini. nama = nama ; ini. status = status ; }
publik String getName () { kembalikan nama ; }
publik int getStatus () { kembalikan status ; } }
Adaptor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
paket bersih. pengkodean yang disederhanakan. androidmysqlsync ;
impor android. konten. Konteks ; impor android. lihat. LayoutInflater ; impor android. lihat. Lihat ; impor android. lihat. ViewGroup ; impor android. widget. ArrayAdapter ; impor android. widget. TampilanGambar ; impor android. widget. TextView ;
impor java. bermanfaat. Daftar ;
/** * Dibuat oleh Belal pada 27/1/2017 */
public class NameAdapter meluas ArrayAdapter
//menyimpan semua nama dalam daftar pribadi Daftar
//objek konteks pribadi Konteks konteks ;
//konstruktor publik NameAdapter ( Konteks context, int resource, List super ( konteks , resource, names); ini. konteks = konteks ; ini. nama = nama ; }
@Ganti publik Lihat getView ( int position, View convertView, ViewGroup parent) {
//mendapatkan layoutinflater LayoutInflater inflater = ( LayoutInflater) context.getSystemService ( Konteks. LAYOUT_INFLATER_SERVICE );
//mendapatkan item tampilan daftar Lihat listViewItem = inflater.mengembang ( R. tata letak. nama , null , benar); TextView textViewName = ( TextView) listViewItem.findViewById ( R. id. textViewName ); ImageView imageViewStatus = ( ImageView) listViewItem.findViewById ( R. id. imageViewStatus );
//mendapatkan nama saat ini Nama nama = nama.dapatkan ( posisi );
//menyetel nama ke tampilan teks textViewName. setText ( nama. getName ());
//jika status sinkronisasi 0 ditampilkan //ikon antrean //lain menampilkan ikon yang disinkronkan jika ( nama. getStatus () == 0) imageViewStatus. setBackgroundResource ( R. dapat digambar. stopwatch ); lain imageViewStatus. setBackgroundResource ( R. dapat digambar. sukses );
return listViewItem ; } }
Pengodean Aktivitas Utama
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
paket bersih. pengkodean yang disederhanakan. androidmysqlsync ;
import android. Manifest ; import android. app. ProgressDialog ; import android. content. BroadcastReceiver ; impor android. konten. Konteks ; import android. content. Intent ; import android. content. IntentFilter ; import android. content. pm. PackageManager ; impor android. database. Kursor ; import android. net. ConnectivityManager ; import android. support. v4. content. ContextCompat ; import android. support. v7. app. AppCompatActivity ; import android. os. Bundle ; impor android. lihat. Lihat ; import android. widget. Button ; import android. widget. EditText ; import android. widget. ListView ; import android. widget. Toast ;
import com. android. volley. AuthFailureError ; impor com. android. voli. Permintaan ; impor com. android. voli. Antrian Permintaan ; import com. android. volley. Response ; import com. android. volley. VolleyError ; impor com. android. voli. kotak alat. StringRequest ; impor com. android. voli. kotak alat. Voli ;
impor org. json. JSONException ; import org. json. JSONObject ;
import java. util. ArrayList ; import java. util. HashMap ; impor java. bermanfaat. Daftar ; import java. util. Map ;
public class MainActivity extends AppCompatActivity implements View. OnClickListener {
/* * this is the url to our webservice * make sure you are using the ip instead of localhost * it will not work if you are using localhost * */ public static final String URL_SAVE_NAME = "http. //192. 168. 1. 107/SqliteSync/saveName. php" ;
//database helper object private DatabaseHelper db ;
//View objects private Button buttonSave ; pribadi EditTeks editTextName ; private ListView listViewNames ;
//List to store all the names pribadi Daftar
//1 means data is synced and 0 means data is not synced public static final int NAME_SYNCED_WITH_SERVER = 1 ; public static final int NAME_NOT_SYNCED_WITH_SERVER = 0 ;
//a broadcast to know weather the data is synced or not public static final String DATA_SAVED_BROADCAST = "net. simplifiedcoding. datasaved" ;
//Broadcast receiver to know the sync status private BroadcastReceiver broadcastReceiver ;
//adapterobject for list view private NameAdapter nameAdapter ;
@Ganti protected void onCreate ( Bundle savedInstanceState ) { super. onCreate ( savedInstanceState ); setContentView ( R. layout. activity_main );
//initializing views and objects db = new DatabaseHelper ( this ); names = new ArrayList<> ();
buttonSave = ( Button ) findViewById ( R. id. buttonSave ); editTextName = ( EditText ) findViewById ( R. id. editTextName ); listViewNames = ( ListView ) findViewById ( R. id. listViewNames );
//adding click listener to button buttonSave. setOnClickListener ( this );
//calling the method to load all the stored names loadNames ();
//the broadcast receiver to update sync status broadcastReceiver = new BroadcastReceiver () { @Override public void onReceive ( Context context , Intent intent ) {
//loading the names again loadNames (); } };
//registering the broadcast receiver to update sync status registerReceiver ( broadcastReceiver , new IntentFilter ( DATA_SAVED_BROADCAST )); }
/* * this method will * load the names from the database * with updated sync status * */ private void loadNames () { names. clear (); Cursor cursor = db. getNames (); if ( cursor. moveToFirst ()) { do { Name name = new Name ( cursor. getString ( cursor. getColumnIndex ( DatabaseHelper. COLUMN_NAME )), cursor. getInt ( cursor. getColumnIndex ( DatabaseHelper. COLUMN_STATUS )) ); names. add ( name ); } while ( cursor. moveToNext ()); }
nameAdapter = new NameAdapter ( this , R. tata letak. names , names ); listViewNames. setAdapter ( nameAdapter ); }
/* * this method will simply refresh the list * */ pribadi void refreshList () { nameAdapter. notifyDataSetChanged (); }
/* * this method is saving the name to ther server * */ private void saveNameToServer () { final ProgressDialog progressDialog = new ProgressDialog ( this ); progressDialog. setMessage ( "Saving Name. " ); progressDialog. show ();
final String name = editTextName. getText (). toString (). trim ();
StringRequest stringRequest = new StringRequest ( Request. Method. POST , URL_SAVE_NAME , new Response. Listener @Override public void onResponse ( String response ) { progressDialog. dismiss (); try { JSONObject obj = new JSONObject ( response ); if (. obj. getBoolean ( "error" )) { //if there is a success //storing the name to sqlite with status synced saveNameToLocalStorage ( name , NAME_SYNCED_WITH_SERVER ); } else { //if there is some error //saving the name to sqlite with status unsynced saveNameToLocalStorage ( name , NAME_NOT_SYNCED_WITH_SERVER ); } } catch ( JSONException e ) { e. printStackTrace (); } } }, new Response. ErrorListener () { @Override public void onErrorResponse ( VolleyError error ) { progressDialog. dismiss (); //on error storing the name to sqlite with status unsynced saveNameToLocalStorage ( name , NAME_NOT_SYNCED_WITH_SERVER ); } }) { @Override protected Map<String , String> getParams () throws AuthFailureError { Map<String , String> params = new HashMap<> (); params. put ( "name" , name ); return params ; } };
VolleySingleton. getInstance ( this ). addToRequestQueue ( stringRequest ); }
//saving the name to local storage private void saveNameToLocalStorage ( String name , int status ) { editTextName. setText ( "" ); db. addName ( name , status ); Name n = new Name ( name , status ); names. add ( n ); refreshList (); }
@Ganti public void onClick ( View view ) { saveNameToServer (); } }
Detecting Network StateCreating Broadcast Receiver
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
paket bersih. pengkodean yang disederhanakan. androidmysqlsync ;
import android. content. BroadcastReceiver ; impor android. konten. Konteks ; import android. content. Intent ; impor android. database. Kursor ; import android. net. ConnectivityManager ; import android. net. NetworkInfo ;
import com. android. volley. AuthFailureError ; impor com. android. voli. Permintaan ; import com. android. volley. Response ; import com. android. volley. VolleyError ; impor com. android. voli. kotak alat. StringRequest ;
impor org. json. JSONException ; import org. json. JSONObject ;
import java. util. HashMap ; import java. util. Map ;
/** * Dibuat oleh Belal pada 27/1/2017 */
public class NetworkStateChecker extends BroadcastReceiver {
//context and database helper object pribadi Konteks konteks ; private DatabaseHelper db ;
@Ganti public void onReceive ( Context context , Intent intent ) {
ini. konteks = konteks ;
db = new DatabaseHelper ( context );
ConnectivityManager cm = ( ConnectivityManager ) context. getSystemService ( Context. CONNECTIVITY_SERVICE ); NetworkInfo activeNetwork = cm. getActiveNetworkInfo ();
//if there is a network if ( activeNetwork . = null ) { //if connected to wifi or mobile data plan if ( activeNetwork. getType () == ConnectivityManager. TYPE_WIFI . activeNetwork. getType () == ConnectivityManager. TYPE_MOBILE ) {
//getting all the unsynced names Kursor kursor = db.getUnsyncedNames (); if ( cursor. moveToFirst ()) { do { //calling the method to save the unsynced name to MySQL saveName ( cursor. getInt ( cursor. getColumnIndex ( DatabaseHelper. COLUMN_ID )), kursor. getString ( cursor. getColumnIndex ( DatabaseHelper. COLUMN_NAME )) ); } while ( cursor. moveToNext ()); } } } }
/* * method taking two arguments * name that is to be saved and id of the name from SQLite * if the name is successfully sent * we will update the status as synced in SQLite * */ private void saveName ( final int id , final String name ) { StringRequest stringRequest = new StringRequest ( Request. Metode. POST , Aktivitas Utama. URL_SAVE_NAME , new Response. Listener @Override public void onResponse ( String response ) { try { JSONObject obj = new JSONObject ( response ); if (. obj. getBoolean ( "error" )) { //updating the status in sqlite db. updateNameStatus ( id , MainActivity. NAME_SYNCED_WITH_SERVER );
//sending the broadcast to refresh the list context. sendBroadcast ( new Intent ( MainActivity. DATA_SAVED_BROADCAST )); } } catch ( JSONException e ) { e. printStackTrace (); } } }, new Response. ErrorListener () { @Override public void onErrorResponse ( VolleyError error ) {
} }) { @Override protected Map<String , String> getParams () throws AuthFailureError { Map<String , String> params = new HashMap<> (); params. put ( "name" , name ); return params ; } };
VolleySingleton. getInstance ( context ). addToRequestQueue ( stringRequest ); }
}
Adding Receiver in Manifest
1 2 3 4 5 6 7
<receiver android. name = ". NetworkStateChecker"> <intent - filter> <action android. name = "android. net. conn. CONNECTIVITY_CHANGE" / > < / intent - filter> < / receiver>
Registering Receiver
1 2 3
registerReceiver ( new NetworkStateChecker (), new IntentFilter ( ConnectivityManager. CONNECTIVITY_ACTION ));
Testing the Application
Unduh Kode Sumber
Android Sync SQlite Database with Server Source Code So thats it for this android sync sqlite database with server tutorial friends. Feel free to leave your comments if you are having any troubles making the project. Also follow the steps carefully as the post is very long. And if you found this helpful please favor us by sharing this post in your social network. Thank You 🙂 Belal Khan Hi, my name is Belal Khan and I am a Google Developers Expert (GDE) for Android. The passion of teaching made me create this blog. If you are an Android Developer, or you are learning about Android Development, then I can help you a lot with Simplified Coding How to synchronize SQLite with MySQL in Android?Android Sync SQLite Database with Server using PHP and MySQL . 3. 1 Creating Android Project 3. 2 Adding Permissions 3. 3 Adding Dependencies 3. 4 Handling SQLite Operations 3. 5 Handling Volley RequestQueue 3. 6 Building Interface. 3. 6. 1 MainActivity. 3. 6. 2 ListView 3. 7 Building ListView. 3. 7. 1 Model Class. . 3. 8 Coding MainActivity How to connect SQLite database to MySQL?The quickest and easiest way to convert SQLite to MySQL is by exporting an SQL Database to a Dump File, and then importing the SQLite Dump into MySQL Database . You can export an SQLite Database to Dump File using the . dump command.
Can we connect MySQL with android?There are two ways to connect android with mysql database. Using web services you will need to create PHP script That script make the connection with database and return the json responce . This is long process to making connection with mysql database.
How to send all data from SQLite to server in android?You can go through this. . Get all the data which you want to send, via select query and store this data in a array list Menggunakan pustaka GSON Anda dapat mengonversi daftar larik itu menjadi data json Now you have to create an API which receive that json data and parse it and insert every record to database |