Java 方法int返回错误的值

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

欢迎大家,我很难在ValueEventListener中为变量设置int值,并在ValueEventListener之外获取该值,因为要检查的方法是
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种方法可以做同样的事情(客户、生产项目等)