11package com .alaminkarno .sqlitedatbase ;
22
3+ import androidx .annotation .NonNull ;
34import androidx .appcompat .app .AppCompatActivity ;
5+ import androidx .core .app .ActivityCompat ;
6+ import androidx .core .content .ContextCompat ;
47import androidx .recyclerview .widget .LinearLayoutManager ;
58import androidx .recyclerview .widget .RecyclerView ;
69
10+ import android .Manifest ;
711import android .annotation .SuppressLint ;
12+ import android .content .pm .PackageManager ;
813import android .database .Cursor ;
914import android .os .Bundle ;
15+ import android .os .Environment ;
16+ import android .view .Menu ;
17+ import android .view .MenuInflater ;
18+ import android .view .MenuItem ;
19+ import android .widget .Toast ;
1020
21+ import java .io .File ;
22+ import java .io .FileWriter ;
23+ import java .text .SimpleDateFormat ;
1124import java .util .ArrayList ;
25+ import java .util .Date ;
1226import java .util .List ;
27+ import java .util .UUID ;
1328
1429public class ShowDataActivity extends AppCompatActivity {
1530
@@ -18,6 +33,8 @@ public class ShowDataActivity extends AppCompatActivity {
1833 List <User > userList ;
1934 DatabaseHelper databaseHelper ;
2035
36+ final static int STORAGE_REQUEST_CODE = 1 ;
37+
2138
2239 @ SuppressLint ("NotifyDataSetChanged" )
2340 @ Override
@@ -45,4 +62,101 @@ protected void onCreate(Bundle savedInstanceState) {
4562 }
4663
4764 }
65+
66+ private void exportCSV () {
67+
68+ File csvFolder = new File (Environment .getExternalStoragePublicDirectory (Environment .DIRECTORY_DOCUMENTS ).getPath ()+"/" +"SQLiteDatabase" );
69+
70+ if (!csvFolder .exists ()){
71+ csvFolder .mkdir ();
72+ }
73+
74+
75+ /// String csvFileName = UUID.randomUUID().toString() + "_database_backup.csv";
76+
77+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss a" );
78+
79+ String csvFileName = "database_backup_" +simpleDateFormat .format (new Date ())+".csv" ;
80+
81+ String csvPath = csvFolder .toString ()+"/" +csvFileName ;
82+
83+ try {
84+ FileWriter fileWriter = new FileWriter (csvPath );
85+
86+ for (int i = 0 ; i < userList .size (); i ++){
87+
88+ fileWriter .append ("" +userList .get (i ).getId ());
89+ fileWriter .append ("," );
90+
91+ fileWriter .append ("" +userList .get (i ).getName ());
92+ fileWriter .append ("," );
93+
94+ fileWriter .append ("" +userList .get (i ).getAge ());
95+ fileWriter .append ("\n " );
96+
97+ }
98+
99+ fileWriter .flush ();
100+ fileWriter .close ();
101+
102+ Toast .makeText (this , "Backup Completed To: " +csvPath , Toast .LENGTH_SHORT ).show ();
103+
104+ }
105+ catch (Exception e ){
106+ Toast .makeText (this , "Error: " +e .getMessage (), Toast .LENGTH_SHORT ).show ();
107+ }
108+
109+ }
110+
111+ public boolean checkStoragePermission (){
112+ return ContextCompat .checkSelfPermission (this , Manifest .permission .WRITE_EXTERNAL_STORAGE ) == PackageManager .PERMISSION_GRANTED ;
113+ }
114+
115+ public void requestStoragePermission (){
116+ ActivityCompat .requestPermissions (this , new String []{Manifest .permission .WRITE_EXTERNAL_STORAGE },STORAGE_REQUEST_CODE );
117+ }
118+
119+
120+ @ Override
121+ public boolean onCreateOptionsMenu (Menu menu ) {
122+ MenuInflater menuInflater = getMenuInflater ();
123+ menuInflater .inflate (R .menu .menu ,menu );
124+ return super .onCreateOptionsMenu (menu );
125+ }
126+
127+ @ Override
128+ public boolean onOptionsItemSelected (@ NonNull MenuItem item ) {
129+
130+ int id = item .getItemId ();
131+
132+ if (id == R .id .menu_backup ){
133+
134+ if (checkStoragePermission ()){
135+ exportCSV ();
136+ }else {
137+ requestStoragePermission ();
138+ }
139+
140+ }else if (id == R .id .menu_restore ){
141+ Toast .makeText (this , "Restore" , Toast .LENGTH_SHORT ).show ();
142+
143+ }
144+
145+ return super .onOptionsItemSelected (item );
146+ }
147+
148+ @ Override
149+ public void onRequestPermissionsResult (int requestCode , @ NonNull String [] permissions , @ NonNull int [] grantResults ) {
150+ super .onRequestPermissionsResult (requestCode , permissions , grantResults );
151+
152+ if (requestCode == STORAGE_REQUEST_CODE ){
153+ if (grantResults .length > 0 && grantResults [0 ] == PackageManager .PERMISSION_GRANTED ){
154+ // Export CSV
155+ exportCSV ();
156+ }
157+ else {
158+ Toast .makeText (this , "Storage Permission Needed!" , Toast .LENGTH_SHORT ).show ();
159+ }
160+ }
161+ }
48162}
0 commit comments