Добавьте эти два на их соответствующих позициях.
Do c
maven { url 'https://jitpack.io' }
implementation 'com.github.hsmnzaydn:easy-csv:1.0.0'
.
Объявить некоторую глобальную переменную
List<String> headerList = new ArrayList<>();
List<String> dataList = new ArrayList<>();
Snapobj snap ;
List<Snapobj > snapList = new ArrayList<Snapobj>();
public final int WRITE_PERMISSON_REQUEST_CODE =1;
Внутри onCreate
EasyCsv easyCsv = new EasyCsv(MainActivity.this);
easyCsv.setSeparatorColumn("^");
easyCsv.setSeperatorLine("~");
headerList.add("rssi^distance^deviceId^timestamp~");
Создать класс Snapobj
public class Snapobj {
String rssi;
String distance;
String deviceId;
String timestamp;
public Snapobj(String rssi, String distance, String deviceId, String timestamp) {
this.rssi = rssi;
this.distance = distance;
this.deviceId = deviceId;
this.timestamp = timestamp;
}
//Add Getters and Setters
}
Теперь внутри onDataChange заполним snapList
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot deviceInf: dataSnapshot.getChildren()){
snapList.add(new Snapobj("pass rssi","pass distance","deviceId","timestamp"));
}
}
Теперь нам нужно построить строку для массива списка данных. Создайте функцию и поместите эти строки
for(Snapobj s : snapList)
{
String s = s.getRssi()+"^"+s.getDistance()+"^"+s.getDeviceId()+"^"+s.getTimestamp()+"~";
dataList.add(s);
}
Наконец создайте файл csv.
easyCsv.createCsvFile("MyFile", headerList, dataList WRITE_PERMISSON_REQUEST_CODE, new
FileCallback() {
@Override
public void onSuccess(File file) {
Log.d(TAG, "File saved in phone storage");
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(MainActivity.this,"com.example.mafiacsv.fileprovider",file));
sendIntent.setType("text/*");
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Intent shareIntent = Intent.createChooser(sendIntent, null);
startActivity(shareIntent);
}
@Override
public void onFail(String err) {
}
});
Поместите это внутрь тег вашего приложения в ManifestFile
<provider
android:name=".GenericFileProvider"
android:authorities="com.example.mafiacsv.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
Создайте пустой класс, который просто расширяет FileProvider.
import androidx.core.content.FileProvider;
public class GenericFileProvider extends FileProvider {}
onSuccess вызывается, когда файл был успешно создан и сохранен во внутренней памяти вашего телефона.
Important
Убедитесь, что значения rssi, distance, id и timestamp не содержат '^' и '~', иначе это не будет работать должным образом. Нам нужны два уникальных символа, чтобы сообщить библиотеке, когда разрывать строку и когда отделять столбец.
Не забудьте спросить WRITE_EXTERNAL_STORAGE
разрешения.