Как получить данные из базы данных, не обновляя приложение android? - PullRequest
0 голосов
/ 20 июня 2020

Я разработал приложение android, в котором я хочу получать данные из базы данных, не обновляя приложение. Я пробовал разные методы, но у меня ни один не работает. Я использую PHP для извлечения данных из базы данных в свое приложение android. Ниже приведен мой код, который пока только извлекает данные из базы данных, но мне нужно обновить sh приложение, если я обновляю данные в базе данных, чтобы получить обновленное значение в приложении. Мне нужны значения в реальном времени из базы данных, например, если я обновляю данные в базе данных, мне нужно такое же обновление в приложении, но без его обновления.

public class Profile extends AppCompatActivity implements View.OnClickListener  {

private TextView textViewUsername,textViewHr,textViewBp;
private Button button;
private ProgressDialog progressDialog;
private SwipeRefreshLayout swipeRefreshLayout;
private ImageView imageViewWet, imageViewTempered;
String username;
private static  int wet,tempered;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile2);
    username = SharedPrefManager.getInstance(this).getUsername();


    textViewUsername = (TextView) findViewById(R.id.pUsername);
    textViewHr = (TextView) findViewById(R.id.heartRate);
    textViewBp = (TextView) findViewById(R.id.bloodPressure);
    swipeRefreshLayout = findViewById(R.id.swipeToRefresh);
    imageViewTempered = (ImageView) findViewById(R.id.imageViewTempered);
    imageViewWet =(ImageView) findViewById(R.id.imageViewWet);
    button = (Button) findViewById(R.id.refresh);


    wet = SharedPrefManager.getInstance(getApplicationContext()).getWetStatus();
    tempered = SharedPrefManager.getInstance(getApplicationContext()).getTemperedStatus();

    textViewUsername.setText(SharedPrefManager.getInstance(this).getUsername());
    textViewHr.setText(String.valueOf(SharedPrefManager.getInstance(this).getHeartRate()));
    textViewBp.setText(String.valueOf(SharedPrefManager.getInstance(this).getTemperature()));

    if(wet==1){
        imageViewWet.setImageResource(R.drawable.tick);
    }
    else{
        imageViewWet.setImageResource(R.drawable.cross);
    }

    if(tempered == 1){
        imageViewTempered.setImageResource(R.drawable.tick);
    }
    else{
        imageViewTempered.setImageResource(R.drawable.cross);
    }

    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {

            data();

            swipeRefreshLayout.setRefreshing(false);


        }
    });



    button.setOnClickListener(this);

    /*if(!SharedPrefManager.getInstance(this).isLoggedIn()){
        finish();
        startActivity(new Intent(this,ProfileActivity.class));
        return;
    }*/


    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Please Wait...");


}



public void data(){



    progressDialog.show();

    StringRequest stringRequest = new StringRequest(Request.Method.POST, Constants.URL_DATA,
            new Response.Listener<String>() {

                @Override
                public void onResponse(String response) {
                    progressDialog.dismiss();
                    try {
                        JSONObject obj = new JSONObject(response);
                        if(!obj.getBoolean("error")){
                            System.out.println("IN SHARED SET VALES");
                            SharedPrefManager.getInstance(getApplicationContext()).data(obj.getInt("Id"),obj.getString("Username"),obj.getInt("Heart_Rate"),obj.getInt("Temperature"),obj.getInt("Wet"),obj.getInt("Tempered"));

                            textViewUsername.setText(SharedPrefManager.getInstance(getApplicationContext()).getUsername());
                            textViewHr.setText(String.valueOf(SharedPrefManager.getInstance(getApplicationContext()).getHeartRate()));
                            textViewBp.setText(String.valueOf(SharedPrefManager.getInstance(getApplicationContext()).getTemperature()));

                            wet = SharedPrefManager.getInstance(getApplicationContext()).getWetStatus();
                            tempered = SharedPrefManager.getInstance(getApplicationContext()).getTemperedStatus();

                            if(wet==1){
                                imageViewWet.setImageResource(R.drawable.tick);
                            }
                            else{
                                imageViewWet.setImageResource(R.drawable.cross);
                            }

                            if(tempered == 1){
                                imageViewTempered.setImageResource(R.drawable.tick);
                            }
                            else{
                                imageViewTempered.setImageResource(R.drawable.cross);
                            }

                        }else{
                            Toast.makeText(getApplicationContext(),obj.getString("message"),Toast.LENGTH_LONG).show();

                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            progressDialog.dismiss();
            Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG).show();
        }
    }

    ){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String,String> params = new HashMap<>();
            params.put("Username",username);
            return params;
        }
    };
    RequestHandler.getInstance(this).addToRequestQueue(stringRequest);


}





@Override
public void onClick(View v) {

    if(v == button){
        data();
    }

}


}

Ниже представлен макет моего приложения. Обычно я хочу обновлять пульс и температуру непрерывно без обновления приложения.

My app layout

Пожалуйста, помогите мне, как я могу получить данные из базы данных в моем приложении, не обновляя приложение?

Заранее спасибо

1 Ответ

0 голосов
/ 20 июня 2020
  1. Попробуйте использовать инструменты реактивного программирования, такие как Rx Java или Rx Android. Реактивное программирование - это в основном асинхронное программирование на основе событий.

  2. Используйте тайм-ауты для автоматического обновления sh содержимого через несколько минут.

  3. Сервер Рендеринг боковых приложений и сокеты также могут быть полезны в таких случаях.

...