Java 方法int返回错误的值
欢迎大家,我很难在ValueEventListener中为变量设置int值,并在ValueEventListener之外获取该值,因为要检查的方法是Java 方法int返回错误的值,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,欢迎大家,我很难在ValueEventListener中为变量设置int值,并在ValueEventListener之外获取该值,因为要检查的方法是value==1,该方法将返回1,否则返回0 我尝试过很多方法,比如通过SharedReferences保存值、将值设置为Textview和从Textview调用,但该方法始终返回0,因为它无法读取在ValueEventListener中设置的值。非常感谢您的帮助。多谢各位 这里是我的代码 int status = 0; protected void
value==1
,该方法将返回1
,否则返回0
我尝试过很多方法,比如通过SharedReferences保存值、将值设置为Textview和从Textview调用,但该方法始终返回0
,因为它无法读取在ValueEventListener中设置的值。非常感谢您的帮助。多谢各位
这里是我的代码
int status = 0;
protected void onCreate(Bundle savedInstanceState) {
...
btnSync_in.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getCustomerList() == 1) {
msg = msg + "Get customer success \n";
} else {
msg = msg + "Get customer unsuccessful \n";
}
AlertDialog.Builder statusDialog = new AlertDialog.Builder(SyncActivity.this);
statusDialog.setPositiveButton("OK", null);
statusDialog.setTitle("Status");
statusDialog.setMessage(msg);
statusDialog.show();
msg = "";
}
});
}
返回int的方法
private int getCustomerList() {
urlRef = myRef.child("...");
urlRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
...
StringRequest stringRequest = new StringRequest(Request.Method.GET, customerURL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
status = 1; //here my problem, value assign here is success
try {
...
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
...
status = 0; // here if unsuccessful
}
});
RequestQueue requestQueue = Volley.newRequestQueue(SyncActivity.this);
requestQueue.add(stringRequest);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
...
}
});
if (status == 1) {
return 1;
} else {
return 0;
}
}
private int getCustomerList(){
urlRef=myRef.child(“…”);
urlRef.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
...
StringRequest StringRequest=new StringRequest(Request.Method.GET、customerURL、new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
status=1;//这里是我的问题,这里的赋值是success
试一试{
...
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
...
status=0;//如果不成功,请单击此处
}
});
RequestQueue RequestQueue=Volley.newRequestQueue(SyncActivity.this);
添加(stringRequest);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
...
}
});
如果(状态==1){
返回1;
}否则{
返回0;
}
}
更好的方法为什么不在getCustomerList()方法中显示您的警报对话框
像这样调用您的getCustomerList()
btnSync_in.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getCustomerList();
}
});
然后像这样在getCustomerList()中添加您的警报对话框
btnSync_in.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getCustomerList();
}
});
示例代码
private void getCustomerList() {
AlertDialog.Builder statusDialog = new AlertDialog.Builder(SyncActivity.this);
statusDialog.setPositiveButton("OK", null);
statusDialog.setTitle("Status");
urlRef = myRef.child("...");
urlRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
...
StringRequest stringRequest = new StringRequest(Request.Method.GET, customerURL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
msg = msg + "Get customer success \n";
statusDialog.setMessage(msg);
statusDialog.show();
msg = "";
try {
...
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
...
msg = msg + "Get customer unsuccessful \n";
statusDialog.setMessage(msg);
statusDialog.show();
msg = "";
}
});
RequestQueue requestQueue = Volley.newRequestQueue(SyncActivity.this);
requestQueue.add(stringRequest);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
...
}
});
}
private void getCustomerList(){
AlertDialog.Builder statusDialog=新建AlertDialog.Builder(SyncActivity.this);
statusDialog.setPositiveButton(“确定”,空);
statusDialog.setTitle(“状态”);
urlRef=myRef.child(“…”);
urlRef.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
...
StringRequest StringRequest=new StringRequest(Request.Method.GET、customerURL、new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
msg=msg+“获得客户成功\n”;
statusDialog.setMessage(msg);
statusDialog.show();
msg=“”;
试一试{
...
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
...
msg=msg+“获取客户失败\n”;
statusDialog.setMessage(msg);
statusDialog.show();
msg=“”;
}
});
RequestQueue RequestQueue=Volley.newRequestQueue(SyncActivity.this);
添加(stringRequest);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
...
}
});
}
异步编程的另一个受害者ValueEventListener
是一个异步调用,您需要检查回调方法内部的状态。谢谢@Nilesh Rathod。。这个方法工作得很好,但是它显示了10次AlertDialog。我想要的是只显示一个AlertDialog,它显示所有成功或失败方法的列表。我有大约10种方法可以做同样的事情(客户、生产项目等)