Firebase Realtime Database是Google提供的后端服务,用于处理您的Android应用,IOS应用以及您的网站的后端任务。它提供了许多服务,例如存储,数据库等等。 Firebase以其Firebase实时数据库而闻名的功能。通过在您的应用程序中使用Firebase实时数据库,您可以向用户提供实时数据更新,而无需实际刷新您的应用程序。在本文中,我们将Excel工作表数据上传到Firebase实时数据库中。当您创建必须上传很多问题的测验应用程序时,这可能会很有用。在这种情况下,您可以使用Excel工作表上传数据。
我们将在本文中构建什么?
我们将构建一个简单的应用程序,使用excel Sheet将数据上传到Firebase实时数据库中。首先,我们将选择一个excel文件,然后通过获取行和列的总数将其上传到firebase,然后将生成一个随机ID,其中将存储逐行数据。注意,我们将使用Java语言实现该项目。
分步实施
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Java作为编程语言。
步骤2:使用AndroidManifest.xml文件
要将数据添加到Firebase,我们必须授予访问Internet的权限。要添加这些权限,请导航至应用程序> AndroidManifest.xml,然后在该文件内向其添加以下权限。
步骤3:使用build.gradle(app)文件
将这些实现添加到其中
implementation fileTree(dir: ‘libs’, include: [‘*.jar’])
implementation ‘com.google.firebase:firebase-database:16.0.4’
implementation files(‘libs/poi-3.12-android-a.jar’)
步骤4:使用activity_main.xml文件
导航到应用程序> res>布局> activity_main.xml,然后将以下代码添加到该文件中。以下是activity_main.xml文件的代码。
XML
Java
import android.Manifest;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.FirebaseDatabase;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
// initialising the cell count as 2
public static final int cellCount = 2;
Button excel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
excel = findViewById(R.id.excel);
// click on excel to select a file
excel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
selectfile();
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 101);
}
}
});
}
// request for storage permission if not given
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 101) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
selectfile();
} else {
Toast.makeText(MainActivity.this, "Permission Not granted", Toast.LENGTH_LONG).show();
}
}
}
private void selectfile() {
// select the file from the file storage
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent, "Select File"), 102);
}
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 102) {
if (resultCode == RESULT_OK) {
String filepath = data.getData().getPath();
// If excel file then only select the file
if (filepath.endsWith(".xlsx") || filepath.endsWith(".xls")) {
readfile(data.getData());
}
// else show the error
else {
Toast.makeText(this, "Please Select an Excel file to upload", Toast.LENGTH_LONG).show();
}
}
}
}
ProgressDialog dialog;
private void readfile(final Uri file) {
dialog = new ProgressDialog(this);
dialog.setMessage("Uploading");
dialog.setCanceledOnTouchOutside(false);
dialog.show();
AsyncTask.execute(new Runnable() {
@Override
public void run() {
final HashMap parentmap = new HashMap<>();
try {
XSSFWorkbook workbook;
// check for the input from the excel file
try (InputStream inputStream = getContentResolver().openInputStream(file)) {
workbook = new XSSFWorkbook(inputStream);
}
final String timestamp = "" + System.currentTimeMillis();
XSSFSheet sheet = workbook.getSheetAt(0);
FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
int rowscount = sheet.getPhysicalNumberOfRows();
if (rowscount > 0) {
// check row wise data
for (int r = 0; r < rowscount; r++) {
Row row = sheet.getRow(r);
if (row.getPhysicalNumberOfCells() == cellCount) {
// get cell data
String A = getCellData(row, 0, formulaEvaluator);
String B = getCellData(row, 1, formulaEvaluator);
// initialise the hash map and put value of a and b into it
HashMap quetionmap = new HashMap<>();
quetionmap.put("A", A);
quetionmap.put("B", B);
String id = UUID.randomUUID().toString();
parentmap.put(id, quetionmap);
} else {
dialog.dismiss();
Toast.makeText(MainActivity.this, "row no. " + (r + 1) + " has incorrect data", Toast.LENGTH_LONG).show();
return;
}
}
// add the data in firebase if everything is correct
runOnUiThread(new Runnable() {
@Override
public void run() {
// add the data according to timestamp
FirebaseDatabase.getInstance().getReference().child("Data").
child(timestamp).updateChildren(parentmap).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
dialog.dismiss();
Toast.makeText(MainActivity.this, "Uploaded Successfully", Toast.LENGTH_LONG).show();
} else {
dialog.dismiss();
Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
}
}
});
}
});
}
// show the error if file is empty
else {
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.dismiss();
Toast.makeText(MainActivity.this, "File is empty", Toast.LENGTH_LONG).show();
}
});
return;
}
}
// show the error message if failed
// due to file not found
catch (final FileNotFoundException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
// show the error message if there
// is error in input output
catch (final IOException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
}
});
}
private String getCellData(Row row, int cellposition, FormulaEvaluator formulaEvaluator) {
String value = "";
// get cell fom excel sheet
Cell cell = row.getCell(cellposition);
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
return value + cell.getBooleanCellValue();
case Cell.CELL_TYPE_NUMERIC:
return value + cell.getNumericCellValue();
case Cell.CELL_TYPE_STRING:
return value + cell.getStringCellValue();
default:
return value;
}
}
}
步骤5:使用MainActivity。 Java文件
打开MainActivity。该类内有Java文件,首先,创建Button类的对象。
public static final int cellCount=2;
Button excel;
其次,在onCreate()方法内部,我们必须将那些对象与我们在.XML文件中提供的各自的ID进行链接。
excel = findViewById(R.id.excel);
从手机存储中检查对excel文件的许可
if(requestCode == 101){
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
// if permission granted them select file
selectfile();
} else {
Toast.makeText(MainActivity.this, "Permission Not granted",Toast.LENGTH_LONG).show();
}
}
从手机中选择Excel文件
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
// file is selected now start activity function to proceed
startActivityForResult(Intent.createChooser(intent, "Select File"),102);
获取一个excel工作表并检查行和列的总数,并将这些值添加到数据库中。
XSSFSheet sheet=workbook.getSheetAt(0);
FormulaEvaluator formulaEvaluator=workbook.getCreationHelper().createFormulaEvaluator();
int rowscount=sheet.getPhysicalNumberOfRows();
if(rowscount > 0){
// check row wise data
for (int r=0;r
Java
import android.Manifest;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.FirebaseDatabase;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
// initialising the cell count as 2
public static final int cellCount = 2;
Button excel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
excel = findViewById(R.id.excel);
// click on excel to select a file
excel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
selectfile();
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 101);
}
}
});
}
// request for storage permission if not given
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 101) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
selectfile();
} else {
Toast.makeText(MainActivity.this, "Permission Not granted", Toast.LENGTH_LONG).show();
}
}
}
private void selectfile() {
// select the file from the file storage
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent, "Select File"), 102);
}
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 102) {
if (resultCode == RESULT_OK) {
String filepath = data.getData().getPath();
// If excel file then only select the file
if (filepath.endsWith(".xlsx") || filepath.endsWith(".xls")) {
readfile(data.getData());
}
// else show the error
else {
Toast.makeText(this, "Please Select an Excel file to upload", Toast.LENGTH_LONG).show();
}
}
}
}
ProgressDialog dialog;
private void readfile(final Uri file) {
dialog = new ProgressDialog(this);
dialog.setMessage("Uploading");
dialog.setCanceledOnTouchOutside(false);
dialog.show();
AsyncTask.execute(new Runnable() {
@Override
public void run() {
final HashMap parentmap = new HashMap<>();
try {
XSSFWorkbook workbook;
// check for the input from the excel file
try (InputStream inputStream = getContentResolver().openInputStream(file)) {
workbook = new XSSFWorkbook(inputStream);
}
final String timestamp = "" + System.currentTimeMillis();
XSSFSheet sheet = workbook.getSheetAt(0);
FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
int rowscount = sheet.getPhysicalNumberOfRows();
if (rowscount > 0) {
// check row wise data
for (int r = 0; r < rowscount; r++) {
Row row = sheet.getRow(r);
if (row.getPhysicalNumberOfCells() == cellCount) {
// get cell data
String A = getCellData(row, 0, formulaEvaluator);
String B = getCellData(row, 1, formulaEvaluator);
// initialise the hash map and put value of a and b into it
HashMap quetionmap = new HashMap<>();
quetionmap.put("A", A);
quetionmap.put("B", B);
String id = UUID.randomUUID().toString();
parentmap.put(id, quetionmap);
} else {
dialog.dismiss();
Toast.makeText(MainActivity.this, "row no. " + (r + 1) + " has incorrect data", Toast.LENGTH_LONG).show();
return;
}
}
// add the data in firebase if everything is correct
runOnUiThread(new Runnable() {
@Override
public void run() {
// add the data according to timestamp
FirebaseDatabase.getInstance().getReference().child("Data").
child(timestamp).updateChildren(parentmap).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
dialog.dismiss();
Toast.makeText(MainActivity.this, "Uploaded Successfully", Toast.LENGTH_LONG).show();
} else {
dialog.dismiss();
Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
}
}
});
}
});
}
// show the error if file is empty
else {
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.dismiss();
Toast.makeText(MainActivity.this, "File is empty", Toast.LENGTH_LONG).show();
}
});
return;
}
}
// show the error message if failed
// due to file not found
catch (final FileNotFoundException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
// show the error message if there
// is error in input output
catch (final IOException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
}
});
}
private String getCellData(Row row, int cellposition, FormulaEvaluator formulaEvaluator) {
String value = "";
// get cell fom excel sheet
Cell cell = row.getCell(cellposition);
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
return value + cell.getBooleanCellValue();
case Cell.CELL_TYPE_NUMERIC:
return value + cell.getNumericCellValue();
case Cell.CELL_TYPE_STRING:
return value + cell.getStringCellValue();
default:
return value;
}
}
}
输出:
数据以这种方式保存在数据库中
GitHub链接: https : //github.com/Anni1123/UploadDataExcelSheet