Sinkronkan sqlite dengan mysql android

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


Kami memerlukan izin berikut, jadi pertama-tama tambahkan ini ke AndroidManifest

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


Menambahkan Dependensi

  compile 'com.android.volley:volley:1.0.0'
  
_


Membuat Layanan Web di php Mysql

  1. Buat folder di direktori root Anda (dalam kasus saya ini adalah htdocs)
  2. buat file php di dalam folder

tulis kode berikut. jika tidak, unduh kode. Unduh Tautan


  • itu siap untuk dijalankan.
    Sinkronkan sqlite dengan mysql android

Sinkronkan sqlite dengan mysql android

Sinkronkan sqlite dengan mysql android

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

  • Pertama-tama Anda dapat melihat apa yang akan kita pelajari di video ini di mana saya menunjukkan aplikasinya

  • Sekarang mari kita lanjutkan dan mulai Android Sync Sqlite Database with Server

Membuat Layanan Web dan Database MySQL

Membuat Basis Data

  • Saya memiliki basis data berikut. Saya menggunakan XAMPP, Anda dapat menggunakan apa pun yang Anda inginkan

Sinkronkan sqlite dengan mysql android
Sinkronkan sqlite dengan mysql android

  • Jadi kita memiliki tabel database. Sekarang kita akan membuat skrip php yang akan menangani penyisipan ke database

Membuat Layanan Web

Membuat Skrip

  • Buat folder di direktori root Anda (dalam kasus saya ini adalah htdocs)
  • Sekarang buat file php di dalam folder, saya telah membuat saveName. php. Dan tulis kode berikut

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

  • Sekarang saatnya menguji skrip yang kami buat. Jadi dalam kasus saya, URL-nya adalah http. //localhost/SqliteSync/saveName. php
  • Saya menggunakan POSTMAN untuk menguji skrip dan Anda dapat melihatnya di tangkapan layar di bawah ini

Sinkronkan sqlite dengan mysql android
Sinkronkan sqlite dengan mysql android

  • Seperti yang Anda lihat, skrip berfungsi dengan baik. Sekarang mari kita lanjutkan dalam proyek Android

Basis Data SQLite Sinkronisasi Android dengan Server

Membuat Proyek Android

  • Buat proyek baru
  • Saya telah membuat AndroidMySQLSync dengan Aktivitas Kosong

Menambahkan Izin

  • Kami memerlukan izin berikut, jadi pertama-tama tambahkan ini ke AndroidManifest. xml

1

2

3

4

 

    <menggunakan - izin android:nama = "android. izin. INTERNET" / >

    <menggunakan - izin android:nama = "android. izin. ACCESS_NETWORK_STATE" / >

 

Menambahkan Dependensi

  • Untuk permintaan jaringan saya akan menggunakan Volley. Jadi tambahkan baris berikut di dalam blok dependensi dari build level aplikasi Anda. file gradle

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

  • Dalam hal ini kita harus menggunakan SQLite dan MySQL. Jadi kelas bernama DatabaseHelper. java dan tulis kode berikut

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

  • Kami akan menggunakan Volley untuk permintaan http. Jadi untuk ini kita akan membuat kelas singleton
  • Buat kelas bernama VolleySingleton dan tulis kode berikut

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 batal addToRequestQueue(Request req) {

        getRequestQueue (). tambahkan ( req );

     }

 

}

 

Antarmuka Bangunan

Aktifitas utama

  • Sekarang di dalam activity_main. xml tulis kode berikut

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>

 

  • Kode di atas akan menghasilkan output berikut
Sinkronkan sqlite dengan mysql android
Sinkronkan sqlite dengan mysql android
Basis Data SQLite Sinkronisasi Android dengan Server
  • Seperti yang Anda lihat, kami memiliki EditText, Button, dan ListView
  • Sekarang izinkan saya memberi tahu Anda apa yang akan kami lakukan. Kami akan menyimpan Nama dari EditText dan kami juga akan menampilkan nama yang disimpan di ListView dengan Status Sinkronisasi. Jadi bagian selanjutnya adalah mendesain layout untuk Custom ListView kita

Tampilan Daftar

  • Buat file xml di dalam direktori tata letak. Saya telah membuat nama. xml

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>

 

  • Seperti yang Anda lihat, kami memiliki TextView untuk menampilkan nama dan ImageView untuk menampilkan status
  • Unduh ikon dari tautan di bawah, kami memiliki dua gambar untuk ditampilkan dalam antrian atau disinkronkan

[unduh id=”4043″]

  • Anda harus menyalin ikon yang diunduh di dalam folder yang dapat digambar

Tampilan Daftar Bangunan

Kelas Model

  • Sekarang buat Nama kelas. java dan tulis kode berikut

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 ;

     }

}

 

  • Sekarang kita akan membuat Adapter untuk ListView kita

Adaptor

  • Buat kelas NameAdapter. java dan tulis kode berikut

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 nama;

 

    //objek konteks

    pribadi Konteks konteks ;

 

    //konstruktor

    publik NameAdapter ( Konteks context, int resource, List names) {

        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

  • Sekarang mari masuk ke dalam MainActivity. java dan tulis kode berikut

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 nama;

 

    //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 ();

     }

}

 

  • Now if you will run the application it will save the name to MySQL and SQLite with the sync or unsynced status
  • But to send the unsynced names to the server automatically we have to detect the Network Status of the phone. For this we need one more broadcast receiver

Detecting Network State

Creating Broadcast Receiver

  • Create a class named NetworkStateChecker. java and write the following code

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

  • Add the following code in your AndroidManifest. xml file inside application tag

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

  • You also need to register the receiver. So add the following line inside onCreate() method of your MainActivity. java file

1

2

3

 

registerReceiver ( new NetworkStateChecker (), new IntentFilter ( ConnectivityManager. CONNECTIVITY_ACTION ));

 

  • Now you can run your application

Testing the Application

  • Run your application. And try saving the name when internet is available also turn off the internet and again try saving your name.
    Sinkronkan sqlite dengan mysql android
    Sinkronkan sqlite dengan mysql android
    Android Sync SQLite Database with Server
  • When the internet will be available again the data will be automatically sent to MySQL

Unduh Kode Sumber

  • You can get the source code from the following GitHub repository

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 🙂

Sinkronkan sqlite dengan mysql android
Sinkronkan sqlite dengan mysql android

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