Загрузите файл базы данных из xampp и сохраните в эмуляторе с SQLite - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь обновить базу данных моего приложения в 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();
            }
        });

    }

Я проверил, что приложение правильно загружает файл базы данных, но при нажатии на один счетчик не загружает данные в счетчики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...