Skip to content

Commit 6e945f2

Browse files
Merge pull request #1 from praveenkumar-programmer/RoomDB
Added ROOM persistence library. The app now stores the last known cou…
2 parents 8c0dd85 + 2e2fb9d commit 6e945f2

File tree

8 files changed

+132
-51
lines changed

8 files changed

+132
-51
lines changed

app/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,8 @@ dependencies {
4040
testImplementation 'junit:junit:4.+'
4141
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
4242
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
43+
44+
//room
45+
implementation "android.arch.persistence.room:runtime:1.1.1"
46+
annotationProcessor "android.arch.persistence.room:compiler:1.1.1"
4347
}
Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
11
package com.geeks4ever.counter_app.model;
22

3+
import android.util.Log;
4+
5+
import androidx.lifecycle.LiveData;
6+
import androidx.room.ColumnInfo;
7+
import androidx.room.Entity;
8+
import androidx.room.PrimaryKey;
9+
10+
@Entity(tableName = "countmodel")
311
public class CountModel {
412

13+
@PrimaryKey
14+
public int key;
15+
16+
@ColumnInfo(name = "count")
517
private String count;
618

7-
public String getCount() {
8-
return count;
19+
public CountModel(int key, String count){
20+
this.key = key;
21+
this.count = count;
922
}
1023

11-
public void setCount(String count) {
12-
this.count = count;
24+
public String getCount(){
25+
Log.e("db", "getCount"+this.count);
26+
return this.count;
1327
}
28+
29+
public void setCount(String count){
30+
31+
Log.e("db", "setCount"+count);
32+
this.count = count;}
1433
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.geeks4ever.counter_app.model.repository;
2+
3+
import androidx.lifecycle.LiveData;
4+
import androidx.room.Dao;
5+
import androidx.room.Insert;
6+
import androidx.room.Query;
7+
import androidx.room.Update;
8+
9+
import com.geeks4ever.counter_app.model.CountModel;
10+
11+
import java.util.List;
12+
13+
@Dao
14+
public interface CountDao {
15+
16+
@Query("Select * from countmodel where `key`= 0")
17+
LiveData<List<CountModel>> getCount();
18+
19+
@Update
20+
void setCount(CountModel count);
21+
22+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.geeks4ever.counter_app.model.repository;
2+
3+
import android.content.Context;
4+
import android.util.Log;
5+
6+
import androidx.room.Database;
7+
import androidx.room.Room;
8+
import androidx.room.RoomDatabase;
9+
10+
import com.geeks4ever.counter_app.model.CountModel;
11+
12+
import java.util.concurrent.Executors;
13+
14+
@Database(entities = {CountModel.class}, version = 1, exportSchema = false)
15+
public abstract class CountDatabase extends RoomDatabase {
16+
17+
private static CountDatabase db;
18+
19+
public abstract CountDao countDao();
20+
21+
public static synchronized CountDatabase getInstance(Context context){
22+
23+
if(db == null){
24+
Log.e("db", "created");
25+
db = Room.databaseBuilder(context.getApplicationContext(),
26+
CountDatabase.class, "count_db")
27+
.fallbackToDestructiveMigration()
28+
.build();
29+
}
30+
return db;
31+
}
32+
33+
}
Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,54 @@
11
package com.geeks4ever.counter_app.model.repository;
22

3+
import android.app.Application;
4+
import android.os.AsyncTask;
35
import android.os.Handler;
6+
import android.os.Looper;
7+
import android.util.Log;
48

59
import androidx.lifecycle.LiveData;
610
import androidx.lifecycle.MutableLiveData;
11+
import androidx.lifecycle.Observer;
712

813
import com.geeks4ever.counter_app.model.CountModel;
914

15+
import java.util.List;
16+
import java.util.concurrent.ExecutorService;
17+
import java.util.concurrent.Executors;
18+
1019
public class CountRepository {
1120

12-
public static CountRepository repository;
13-
private final CountModel countModel;
21+
private CountDao countDao;
22+
private LiveData<List<CountModel>> countModelLiveData;
1423

15-
final MutableLiveData<CountModel> data = new MutableLiveData<>();
24+
public CountRepository(Application application){
1625

17-
private CountRepository(){
18-
countModel = new CountModel();
19-
countModel.setCount("0");
20-
}
26+
countDao = CountDatabase.getInstance(application).countDao();
27+
countModelLiveData = countDao.getCount();
2128

22-
//Singleton Implementation
23-
public static CountRepository getInstance(){
29+
}
2430

31+
public LiveData<List<CountModel>> getCount(){
32+
return countModelLiveData;
33+
}
2534

26-
if(repository == null)
27-
repository = new CountRepository();
28-
return repository;
35+
public void setCount(int count){
36+
new SetCountAsyncTask(countDao).execute(new CountModel(0, String.valueOf(count)));
2937
}
3038

39+
private static class SetCountAsyncTask extends AsyncTask<CountModel, Void, Void>{
3140

32-
public LiveData<CountModel> getCount(){
33-
data.setValue(countModel);
34-
return data;
35-
}
41+
private CountDao countDao;
3642

37-
public void setCount(int count){
43+
private SetCountAsyncTask(CountDao countDao){
44+
this.countDao = countDao;
45+
}
3846

39-
countModel.setCount(String.valueOf(count));
40-
data.postValue(countModel);
47+
@Override
48+
protected Void doInBackground(CountModel... countModels) {
49+
countDao.setCount(countModels[0]);
50+
return null;
51+
}
4152
}
4253

4354
}

app/src/main/java/com/geeks4ever/counter_app/view/HomeScreen.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import com.geeks4ever.counter_app.R;
1313
import com.geeks4ever.counter_app.databinding.HomeScreenBinding;
1414
import com.geeks4ever.counter_app.viewmodel.CounterViewModel;
15-
import com.geeks4ever.counter_app.viewmodel.viewModelFactory;
1615

1716
public class HomeScreen extends AppCompatActivity implements Listener {
1817

@@ -28,7 +27,8 @@ protected void onCreate(Bundle savedInstanceState) {
2827

2928
binding.setListeners(this);
3029

31-
viewModel = new ViewModelProvider(this, new viewModelFactory()).get(CounterViewModel.class);
30+
viewModel = new ViewModelProvider(this, new ViewModelProvider
31+
.AndroidViewModelFactory(getApplication())).get(CounterViewModel.class);
3232

3333
count = viewModel.getCount();
3434

app/src/main/java/com/geeks4ever/counter_app/viewmodel/CounterViewModel.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,47 @@
11
package com.geeks4ever.counter_app.viewmodel;
22

3+
import android.app.Application;
4+
import android.content.Context;
5+
6+
import androidx.annotation.NonNull;
7+
import androidx.lifecycle.AndroidViewModel;
38
import androidx.lifecycle.LiveData;
49
import androidx.lifecycle.MutableLiveData;
510
import androidx.lifecycle.Observer;
611
import androidx.lifecycle.ViewModel;
712

813
import com.geeks4ever.counter_app.model.CountModel;
14+
import com.geeks4ever.counter_app.model.repository.CountDatabase;
915
import com.geeks4ever.counter_app.model.repository.CountRepository;
1016

17+
import java.util.List;
1118
import java.util.Objects;
1219
import java.util.concurrent.ExecutorService;
1320
import java.util.concurrent.Executors;
1421

15-
public class CounterViewModel extends ViewModel {
22+
public class CounterViewModel extends AndroidViewModel {
1623

1724
private final CountRepository countRepository;
1825

1926
ExecutorService executorService;
2027

2128
final MutableLiveData<String> count = new MutableLiveData<>();
22-
final LiveData<CountModel> data;
2329

24-
public CounterViewModel() {
25-
countRepository = CountRepository.getInstance();
26-
data = countRepository.getCount();
27-
data.observeForever( new Observer<CountModel>() {
30+
public CounterViewModel(@NonNull Application application) {
31+
super(application);
32+
33+
count.setValue("0");
34+
35+
countRepository = new CountRepository(application);
36+
countRepository.getCount().observeForever( new Observer<List<CountModel>>() {
2837
@Override
29-
public void onChanged(CountModel countModel) {
30-
count.setValue(countModel.getCount());
38+
public void onChanged(List<CountModel> countModel) {
39+
count.setValue(countModel.get(0).getCount());
3140
}
3241
});
3342
}
3443

44+
3545
public LiveData<String> getCount(){
3646
return count;
3747
}

app/src/main/java/com/geeks4ever/counter_app/viewmodel/viewModelFactory.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)