gpt4 book ai didi

java - 如何在不刷新android应用程序的情况下从数据库获取数据?

转载 作者:行者123 更新时间:2023-12-01 16:13:07 26 4
gpt4 key购买 nike

我开发了一个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();
}

}


}

下面是我的应用程序的布局。基本上我想连续更新心率温度而不刷新应用程序。

My app layout

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

提前致谢

最佳答案

  1. 尝试使用 RxJava 或 RxAndroid 等响应式编程工具。响应式编程基本上是基于事件的异步编程。

  2. 使用超时功能在几分钟后自动刷新内容。

  3. 服务器端应用程序渲染和套接字对于这种情况也很有用。

关于java - 如何在不刷新android应用程序的情况下从数据库获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62482504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com