首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Textlocal API只将SMS发送给一个用户,而不发送给其他用户

Textlocal API只将SMS发送给一个用户,而不发送给其他用户
EN

Stack Overflow用户
提问于 2019-02-06 14:05:12
回答 1查看 178关注 0票数 3

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

代码语言:javascript
复制
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,phone,reg,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, "+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 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();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-02-06 16:04:37

databaseReference1.child(reg).addListenerForSingleValueEvent()被触发时,phone已经被设置为最后一个student对象值。因此,每当databaseReference1 listener被触发时,短信都会被发送到列表中的最后一个手机值。

相应地修改您的逻辑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54547529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档