spróbowałem to w inny sposób, użyłem do tworzenia Excela Api:
http://www.independentsoft.de/jspreadsheet/index.html
ale dalej nie mogłem utworzyć podpisanego pliku APK, wiec w buildzie gradla dodałem:
lintOptions {
checkReleaseBuilds false
abortOnError false
}
teraz mogłem utworzyć plik APK, ale nie moge go zainstalować :(
02-01 12:58:34.118 756-789/? W/PackageManager: Failed collect during installPackageLI
android.content.pm.PackageParser$PackageParserException: Package /data/app/vmdl275365086.tmp/base.apk has no certificates at entry AndroidManifest.xml
at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1108)
at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1061)
at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:10963)
at com.android.server.pm.PackageManagerService.access$2300(PackageManagerService.java:255)
at com.android.server.pm.PackageManagerService$6.run(PackageManagerService.java:8999)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.os.HandlerThread.run(HandlerThread.java:61)
at com.android.server.ServiceThread.run(ServiceThread.java:46)
jakby ktoś miał chwilke czasu i rzucił okiem, co w poniższej klasie może być uważane za przestarzałe ?
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Environment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import com.google.gson.Gson;
import com.independentsoft.office.spreadsheet.Cell;
import com.independentsoft.office.spreadsheet.Workbook;
import com.independentsoft.office.spreadsheet.Worksheet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
public class SaveActivity extends AppCompatActivity {
public static final String MY_HASHMAP = "myHashMap";
Button btnSave;
EditText etFileName;
RadioGroup rgFileType;
RadioButton rbExcelXLSX, rbCSV;
String fileType;
HashMap<String, Long> barcodeMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_save);
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(R.string.titleSaveAvtivity);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
barcodeMap = new HashMap<String, Long>();
loadHashMapFromMemory();
btnSave = (Button) findViewById(R.id.btnSave);
btnSave.setOnClickListener((view) -> {
if (checkedRadioButton()) {
new AsyncSaveToFile().execute();
} else {
Toast.makeText(SaveActivity.this, R.string.stCheckFileType, Toast.LENGTH_SHORT).show();
}
});
etFileName = (EditText) findViewById(R.id.etFileName);
rgFileType = (RadioGroup) findViewById(R.id.rgFileType);
rbExcelXLSX = (RadioButton) findViewById(R.id.rbExcelTypeXLSX);
rbCSV = (RadioButton) findViewById(R.id.rbCSVType);
}
boolean checkedRadioButton() {
boolean checked = (rbExcelXLSX.isChecked() || rbCSV.isChecked());
return checked;
}
public void onRadioButtonClick(View view) {
switch (view.getId()) {
case R.id.rbExcelTypeXLSX:
fileType = ".xlsx";
break;
case R.id.rbCSVType:
fileType = ".csv";
break;
}
}
private class AsyncSaveToFile extends AsyncTask<Void, Integer, Void> {
ProgressDialog dialog;
File file;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(SaveActivity.this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMax(barcodeMap.size());
dialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
if (rbExcelXLSX.isChecked()) {
writeExcel();
}
if (rbCSV.isChecked()) {
writeCSV();
}
return null;
}
void writeCSV() {
file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), fileName() + fileType);
try {
Writer writer = new FileWriter(file);
writer.append(getString(R.string.strScanedBarcode))
.append(" , ")
.append(getString(R.string.strHowManyTimesScaned))
.append("\n");
for (Map.Entry<String, Long> entry : barcodeMap.entrySet()) {
writer.append(entry.getKey())
.append(" , ")
.append(entry.getValue().toString())
.append("\n");
}
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
void writeExcel() {
Workbook workbook = new Workbook();
Worksheet sheet = new Worksheet();
sheet.set("A1", new Cell(getString(R.string.strScanedBarcode)));
sheet.set("B1", new Cell(getString(R.string.strHowManyTimesScaned)));
workbook.getSheets().add(sheet);
int rowNum = 2;
double currentProgress = 0;
double previousProgress = 0;
for (Map.Entry<String, Long> entry : barcodeMap.entrySet()){
sheet.set("A",rowNum, new Cell(entry.getKey()));
sheet.set("B", rowNum, new Cell(entry.getValue().toString()));
rowNum++;
currentProgress = barcodeMap.entrySet().size() / barcodeMap.size();
if (currentProgress - previousProgress >= 0.05) {
publishProgress(barcodeMap.entrySet().size());
previousProgress = currentProgress;
}
}
file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), fileName() + fileType);
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(file);
workbook.save(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
dialog.setProgress(values[0]);
}
@Override
protected void onPostExecute(Void v) {
super.onPostExecute(v);
dialog.dismiss();
Toast.makeText(SaveActivity.this, getString(R.string.strSavedIn) + file.getPath(), Toast.LENGTH_LONG).show();
}
}
String fileName() {
String fileName = etFileName.getText().toString().trim();
if (fileName.equals("")) {
fileName = "default";
}
return fileName;
}
void loadHashMapFromMemory() {
SharedPreferences preferences = getSharedPreferences(MY_HASHMAP, MODE_PRIVATE);
String wrapperStr = preferences.getString("hashmap", "");
Gson gson = new Gson();
MapWrapper wrapper = gson.fromJson(wrapperStr, MapWrapper.class);
if (wrapper != null) {
barcodeMap = wrapper.getBarcodeMap();
}
}
}