Я пытаюсь обновить базу данных моего приложения в AndroidStudio с помощью кнопки. Когда вы нажимаете его, программа загружает файл «bdcortes.db» из xampp с URL-адресом: http://IP:Port/user/bdcortes.db и перезаписывает существующий файл по пути: /data/data/com.example.user.app/databases. /
Начиная с последних проблем с файлом базы данных, я исправил некоторые ошибки, такие как ip и порт соответствующего URL в xampp. Но теперь у меня есть другая проблема. Когда я имею дело с загрузкой данных в счетчиках, моя программа не читает базу данных должным образом (когда у меня есть новый файл базы данных в эмуляторе). Я не знаю, нужно ли мне останавливать поток, когда я закончу скачивать файл, или взимать плату с другого TestAdapter , где я делаю все запросы в файле базы данных.
Спасибо!
public class Notas extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
Spinner spinnerUni, spinnerGrad, spinnerAnio;
TextView textView;
Context myContext = this;
ProgressDialog dialog;
String fileDownloadPath = "http://localhost:4432/mario/bdcortes";
String fileSavePath = "/data/data/com.example.mariorg.app/databases/";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notas);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
TestAdapter mDbHelper = new TestAdapter(this);
mDbHelper.createDatabase();
mDbHelper.open();
dialog = null;
// Inicialización de los elementos layout
textView = findViewById(R.id.tvResultado);
spinnerUni = findViewById(R.id.spUniversidad);
spinnerGrad = findViewById(R.id.spGrado);
spinnerAnio = findViewById(R.id.spAnio);
spinnerUni.setOnItemSelectedListener(this);
spinnerGrad.setOnItemSelectedListener(this);
spinnerAnio.setOnItemSelectedListener(this);
loadAllSpinners();
spinnerUni.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
loadGrades(spinnerUni.getSelectedItem().toString(), spinnerAnio.getSelectedItem().toString());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public void actualizar(View view){
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
// dialog = ProgressDialog.show(Notas.this, "", "Actualizando...", true);
new Thread(new Runnable(){
@Override
public void run(){
downloadFile(fileDownloadPath, fileSavePath);
}
}).start();
break;
case DialogInterface.BUTTON_NEGATIVE:
Toast toast1 = Toast.makeText(getApplicationContext(), "ERROR AL DESCARGAR BD", Toast.LENGTH_SHORT);
toast1.show();
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Esto descargará los años previos a 2018. ¿Está seguro?").setPositiveButton("Sí", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
}
public void downloadFile(String fileDownloadPath, String fileSavePath){
try{
File saveFile = new File(fileSavePath);
URL u = new URL(fileDownloadPath);
URLConnection con = u.openConnection();// abrir conexion
int lenghtofContent = con.getContentLength();
DataInputStream DIStream = new DataInputStream(u.openStream());
byte[] buffer = new byte[lenghtofContent];
DIStream.readFully(buffer);
DIStream.close();
Log.e("HOLA", DIStream.toString());
DataOutputStream DOStream = new DataOutputStream(new FileOutputStream(saveFile));
DOStream.write(buffer);
DOStream.flush();
DOStream.close();
Toast toast1 = Toast.makeText(Notas.this, "ACTUALIZADO", Toast.LENGTH_SHORT);
toast1.show();
//hideProgressIndicator();
}catch (FileNotFoundException e){
//hideProgressIndicator();
}catch (IOException e){
//hideProgressIndicator();
}catch (Exception e){
}
}
private void hideProgressIndicator() {
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.dismiss();
}
});
}
Я проверил, что приложение правильно загружает файл базы данных, но при нажатии на один счетчик не загружает данные в счетчики.