我开发了一个Android应用程序,该程序中我想从数据库中获取数据而不刷新应用程序。我尝试了不同的方法,但没有人适合我。我正在使用PHP从数据库中获取数据到我的android应用程序中。下面是我的代码,目前仅从数据库中获取数据,但是如果我更新数据库中的数据以获取应用程序中的更新值,则必须刷新应用程序。我需要数据库中的实时值,例如,如果我更新数据库中的数据,我希望在应用程序中进行相同的更新,但不刷新它。

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();
    }

}


}


下面是我的应用程序的布局。基本上,我想连续更新心率和体温,而无需刷新应用程序。

java - 如何从数据库中获取数据而不刷新Android应用程序?-LMLPHP

请帮助我,如何在不刷新应用程序的情况下将数据从数据库获取到应用程序中?

提前致谢

最佳答案

1)尝试使用反应式编程工具,例如RxJava或RxAndroid。响应式编程基本上是基于事件的异步编程。

2)在几分钟后使用超时来自动刷新内容。

3)在这种情况下,服务器端应用程序渲染和套接字也可能很有用。

10-04 23:00