我想将对象从Android DTO传递到服务

时间:2019-05-05 16:09:08

标签: java

它实现了一种服务,该服务发送警报并在DB中输入时间后发送消息。但是,DTO中从数据库接收信息的值不会传递给服务。

您已完成在Firebase上设置dto。但是,该服务不会从dto接收数据。

public class timeService extends Service {
NotificationManager Notifi_M;
serviceThread thread;
Notification Notifi ;
public ChatData chat;
String channelId = "channel";
String channelName = "Channel Name";

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    chat=new ChatData();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Notifi_M = (NotificationManager) 
getSystemService(Context.NOTIFICATION_SERVICE);
    myServiceHandler handler = new myServiceHandler();
    thread = new serviceThread(handler);
    thread.start();
    return START_STICKY;
}

//서비스가 종료될 때 할 작업

public void onDestroy() {
    thread.stopForever();
    thread = null;//쓰레기 값을 만들어서 빠르게 회수하라고 null을 넣어줌.
}

class myServiceHandler extends Handler {
    @Override
    public void handleMessage(android.os.Message msg) {
        Intent intent = new Intent(timeService.this, OnOffActivity.class);
        PendingIntent pendingIntent = 
PendingIntent.getActivity(timeService.this, 0, 
intent,PendingIntent.FLAG_UPDATE_CURRENT);



        try {
            //전송
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(chat.getSosNum(), null, 
chat.getMsg(), null, null);
            Toast.makeText(getApplicationContext(), "전송 완료!", 
Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), "전송 실패!", 
Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }



        nofitication2();


    }
};

//팝업알림
private void nofitication2() {
    NotificationManager notifManager = (NotificationManager) 
getSystemService  (Context.NOTIFICATION_SERVICE);

    if (android.os.Build.VERSION.SDK_INT >= 
android.os.Build.VERSION_CODES.O) {
        int importance = NotificationManager.IMPORTANCE_HIGH;

        NotificationChannel mChannel = new NotificationChannel(
                channelId, channelName, importance);

        notifManager.createNotificationChannel(mChannel);
    }
    NotificationCompat.Builder builder =
            new NotificationCompat.Builder(getApplicationContext(), 
channelId);

    Intent notificationIntent = new Intent(getApplicationContext(), 
MainActivity.class);

    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
Intent.FLAG_ACTIVITY_SINGLE_TOP);

    int requestID = (int) System.currentTimeMillis();
    PendingIntent pendingIntent
            = PendingIntent.getActivity(getApplicationContext()
            , requestID
            , notificationIntent
            , PendingIntent.FLAG_UPDATE_CURRENT);

    builder.setContentTitle("퇴근시간 이탈") // required
            .setContentText("팝업 확인해주세요")  // required
            .setDefaults(Notification.DEFAULT_ALL) // 알림, 사운드 진동 설정
            .setAutoCancel(true) // 알림 터치시 반응 후 삭제

            .setSound(RingtoneManager

                    .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))

            .setSmallIcon(android.R.drawable.btn_star)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), 
R.drawable.mainlogo))
            .setBadgeIconType(R.drawable.mainlogo)

            .setContentIntent(pendingIntent);

    notifManager.notify(0, builder.build());

}
}

public class serviceThread extends Thread{
Handler handler;
boolean isRun = true;
int count=0;
ChatData chat=new ChatData();
int setTime=0;

public serviceThread(Handler handler){
    this.handler = handler;
}

public void stopForever(){
    synchronized (this) {
        this.isRun = false;
    }
}

public void run(){
    /*if(chat.getTime()!=NULL){
    setTime=Integer.parseInt(chat.getTime());
    }*/
    //반복적으로 수행할 작업을 한다.
    while(isRun){
        if(count==50) {
            handler.sendEmptyMessage(0);//쓰레드에 있는 핸들러에게 메세지를 
보냄
        }
        try{
            count++;
            Thread.sleep(1000); //1초씩 쉰다.
        }catch (Exception e) {}
    }
}
}


public class ChatData {
public String getAdID() {
    return adID;
}

public void setAdID(String adID) {
    this.adID = adID;
}

private  String adID;
private String name;
private String start;
private String end;
private String sosNum;
private String msg;
private String time;

public ChatData() { }

public ChatData(String name,String start,String end,String sosNum,String 
msg,String time){
    this.name=name;
    this.start=start;
    this.end =end;
    this.sosNum=sosNum;
    this.msg=msg;
    this.time=time;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getStart() {
    return start;
}

public void setStart(String start) {
    this.start = start;
}

public String getEnd() {
    return end;
}

public void setEnd(String end) {
    this.end = end;
}

public String getSosNum() {
    return sosNum;
}

public void setSosNum(String sosNum) {
    this.sosNum = sosNum;
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}

public String getTime() {
    return time;
}

public void setTime(String time) {
    this.time = time;
}

}

我遇到错误了

  

java.lang.IllegalArgumentException:无效的destinationAddress   W / System.err:位于android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:360)           在android.telephony.SmsManager.sendTextMessage(SmsManager.java:350)           在com.example.test01.timeService $ myServiceHandler.handleMessage(timeService.java:72)           在android.os.Handler.dispatchMessage(Handler.java:106)

消息传递错误

0 个答案:

没有答案