public class PrivateActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, CardView.OnClickListener {
private static Database db;
private ListView privateDocs;
private CardView Upload;
final int ACTIVITY_CHOOSE_FILE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_private);
try {
db = Database.newInstance();
fillListWithDocuments();
} catch (Exception ex) {
Toast.makeText(this, "Error: " + ex.getMessage(), Toast.LENGTH_LONG).show();
}
}
private void fillListWithDocuments() throws Exception {
ArrayList<PrivateFile> privateDoc = db.getAllPrivateFiles(Database.getCurLoggedInStudent().getVisitedClass().getRoomNr());
ArrayAdapter<PrivateFile> arrayAdapter = new ArrayAdapter<PrivateFile>(
this,
android.R.layout.simple_list_item_1,
privateDoc);
privateDocs.setAdapter(arrayAdapter);
}
@Override
public void onClick(View v) {
try {
switch (v.getId()) {
case R.id.btnUpload: {
Intent chooseFile;
Intent intent;
chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.setType("*/*");
intent = Intent.createChooser(chooseFile, "Choose a file");
startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);
}
}
} catch (Exception ex) {
Toast.makeText(this, "Error caused by uploading file: " + ex.getMessage(), Toast.LENGTH_LONG).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case ACTIVITY_CHOOSE_FILE: {
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
try {
byte[] inputData = getBytes(getContentResolver().openInputStream(uri));
PrivateFile pf = new PrivateFile(1,inputData);
db.addPrivateFile(pf);
fillListWithDocuments(); //refreshing table
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
public byte[] getBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
return byteBuffer.toByteArray();
}
}
Итак, у меня есть действие со списком и кнопкой.listview показывает список файлов, которые были загружены в мою базу данных sql с помощью кнопки Upload
.Код работает отлично, единственная проблема, с которой я борюсь, это то, что после добавления файла список не обновляется.Мне всегда нужно закрыть свою деятельность и начать ее заново.Я также попытался перезагрузить acitivty, но это не сработало.
PS: База данных - это просто класс, который вызывает функции веб-сервиса.Я показал только соответствующие фрагменты кода.