java-Textlocal API仅将SMS发送给一个用户,而不发送给其他用户

我正在做一个考勤应用程序,用于存储学生的出勤率,我想偶尔将他们的出勤率发送给他们的父母.所以问题是当我从Firebase数据库中检索所有学生的姓名,百分比,电话号码并使用Textlocal API向他们发送SMS时,它仅向一个用户发送SMS,而其余用户则不发送.我很高兴有人帮助我.提前致谢.

DatabaseReference databaseReference=FirebaseDatabase.getInstance().getReference("Students");
                    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for (final DataSnapshot dataSnapshot1:dataSnapshot.getChildren()){

                                        Student student=dataSnapshot1.getValue(Student.class);

                                        final String name=student.getName();
                                        final String phone=student.getPhone();
                                        final String reg=student.getReg();

                                        DatabaseReference databaseReference1=FirebaseDatabase.getInstance().getReference("Count");
                                        databaseReference1.child(reg).addListenerForSingleValueEvent(new ValueEventListener() {
                                            @Override
                                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                                if (dataSnapshot.exists()){
                                                    int presentPeriods=dataSnapshot.getValue(int.class);
                                                    int totalPeriods=totalWorkingDays*7;
                                                    float percent=(float)presentPeriods/(float)totalPeriods*100;
                                                    int nPrecent=(int)percent;
                                                    sendSMS(name,phone,reg,nPrecent);
                                                }
                                                else {
                                                    int percent=0;
                                                    sendSMS(name,percent);
                                                }
                                            }

                                            @Override
                                            public void onCancelled(@NonNull DatabaseError databaseError) {

                                            }
                                        });



                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

private void sendSMS(String name,String phone,String reg,int percent) {
    if (networkAvailable()){
        Toast.makeText(this,"Sending alerts...",Toast.LENGTH_SHORT).show();
        System.out.println("To: "+phone.replace("+91","")+" / "+"Your ward,"+name+" with Register Number "+reg.replace("R","")+" is having Attendance percentage of "+percent+" as on "+new SimpleDateFormat("dd-MM-yyyy",Locale.getDefault()).format(new Date()));
        String out="Your ward,Locale.getDefault()).format(new Date());
        String toNumber=phone.replace("+91","");


        try {
            // Construct data
            String apiKey = "apikey=" + "XXXXXXXXXXX";
            String message = "&message=" + out;
            String sender = "&sender=" + "TXTLCL";
            String numbers = "&numbers=" + toNumber;

            // Send data
            HttpURLConnection conn = (HttpURLConnection) new URL("https://api.textlocal.in/send/?").openConnection();
            String data = apiKey + numbers + message + sender;
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Length",Integer.toString(data.length()));
            conn.getOutputStream().write(data.getBytes("UTF-8"));
            final BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            final StringBuffer stringBuffer = new StringBuffer();
            String line;
            while ((line = rd.readLine()) != null) {
                stringBuffer.append(line);
            }
            rd.close();
            Toast.makeText(this,stringBuffer.toString(),Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            System.out.println("Error SMS "+e);
            Toast.makeText(this,"Error: "+e.toString(),Toast.LENGTH_SHORT).show();
        }

    }
    else {
        Toast.makeText(this,"No Internet Connection",Toast.LENGTH_SHORT).show();
    }
}
最佳答案
触发databaseReference1.child(reg).addListenerForSingleValueEvent()时,电话已设置为上一个学生对象值.因此,无论何时触发databaseReference1侦听器,短信都会发送到列表中的最后一个电话值.

相应地修改逻辑.

相关文章

AdvserView.java package com.earen.viewflipper; import an...
ImageView的scaleType的属性有好几种,分别是matrix(默认)...
文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win1...
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由main...
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件...
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项...