net


net은  4.15.27 버전 이상 부터 제공되며 해당 라이브러리를 추가하여 사용해야 된다.

net은 HSP 에서 확장 라이브러리로 제공하는 API 로 aar 라이브러리 파일과 build.gradle 파일을 수정하여 사용할 수 있다. 

라이브러리 추가 방법은 Android 개발 가이드 (http://hone.hanwha.co.kr/hsp/bin/view/android/guide/android-dev-guide/) 링크의 내용을 참조하면 된다.

net 은 HSP 의 Operation 또는 Hub 와 통신을 쉽게 사용하기 위해서 만들어졌으며 서버와 주고 받는 데이터는 HoneMobileContainer을 통해 전달할 수 있다.

MessageContainer Class

public final class HoneMobileContainer <T> implements Serializable {
    private String target;
    private String path;
    private String method = "POST";
    private HoneMobileMessage<T> message;
    private HoneMobileOptions options;
}

HoneMobileMessage Class

public final class HoneMobileMessage<P> implements Serializable {
    private Map<String, Object> header;
    private P payload;
}

HoneMobileMessage Class

public final class HoneMobileOptions<P> implements Serializable {
    private int requestTimeout = -1;
    private Map<String, Object> attachedFiles;
}

MessageContainer

필드필드설명비고M/O
target 서버이름, OP가 미리 정의되어 있어야 함 M
path 서비스 URL 구성을 위한 path M
method HTTP 전송 방식
  • POST
  • GET,
  • PUT
  • DELETE
대소문자 구분 없음M
message Header 와 Playload 로 구성되며 서버로 전송되는 실제 패킷.
개발 시에는 서버와 비즈앱 간의 합의된 규격서를 기반으로 작성된다. 
 O
header패킷 공통 정보 O
payload전송 데이터 O
options   O
requestTimeout네트워크 read/connection timeout 값  O
attachedFilesUpload할 파일 데이터  O
     

request

HSP 의 Operation 또는 Hub 와의 네트워크 통신 기능을 제공한다. 

options

필드설명비고M/O
container서버로 데이터 전송에 필요한 정보HoneMobileContainerM
successCallback응답 패킷의 내용 전달 M
errorCallback오류 메시지 전달 M
statusListenerRequest 통신 진행 상황 전달OnStatusListenerO
     

successCallback

필드설명비고
result응답 패킷의 내용 
    

errorCallback

필드필드설명비고
e 오류 객체  
code상세 오류 코드  
message오류 메시지  
     

statusListener (Optional)

필드필드설명비고
status Request 통신 진행 상황
  • Status.STATRT : 통신 시작
  • Status.FINISH : 통신 종료
  • Status.PROGRESS : 통신 진행 상태
  
options 파일 업로드/다운로드 시 제공되는 데이터 사이즈  
totalByte전체 데이터 사이즈단위 byte 
currentByte현재 수신된 데이터 사이즈단위 byte  
     

Example

Post

데이터 생성 요청

val container = HoneMobileContainer<Map<String, Any>>().apply {
    target = "hub1"
    path = "/notice/boards"
    method = "post"
    message = HoneMobileMessage<Map<String, Any>>().apply {
      header = hashMapOf<String, Any?>()
      payload = hashMapOf<String, Any>().apply {
         put("title", "[공지] Android 15 업그레이드 패치 관련 공지")
         put("contents", "Android 15업그레이드 패치 관련 내용입니다.")
         put("postedAt", 1704692416000)
     }
   }
    options = HoneMobileOptions().apply {
         requestTimeout = 10000
   }
}

DAPNet.request(activity, container,  {
          // TODO  
       }, {
          // TODO
       }, object: OnStatusListener() {
            override fun onStatus(status: Status, options: Options?) {
                when (status) {
                    Status.START  -> {

                   }
                    Status.FINISH -> {

                   }
               }
           }
       })
}
Map<String, Object> payload = new HashMap<>();
payload.put("title", "[공지] Android 15 업그레이드 패치 관련 공지 ");
payload.put("contents", " Android 15 업그레이드 패치 관련 내용입니다.");
payload.put("postedAt", 170469241);

HoneMobileMessage message = new HoneMobileMessage();
message.setPayload(payload);

HoneMobileOptions options = new HoneMobileOptions();
options.setRequestTimeout(10000);

HoneMobileContainer container = new HoneMobileContainer<>();
container.setTarget("hub1");
container.setPath("/notice/boards");
container.setMethod("post");
container.setMessage(message);
container.setOptions(options);

DAPNet.request(activity, container, result -> {
           // Todo
       }, error -> {
           // Todo
       }, new OnStatusListener() {
           @Override
           public void onStatus(@NonNull Status status, @Nullable Options options) {
               switch (status) {
                   case START:
                       break;

                   case FINISH:
                       break;
               }
           }
       });

파일 업로드 요청

val path = "/data/user/0/com.hanwha.testhonemobile/files/hone_repository/bizAppId/test.png"

val container = HoneMobileContainer<Map<String, Any>>().apply {
    target = "hub1"
    path = "/notice/boards"
    method = "post"
    message = HoneMobileMessage<Map<String, Any>>().apply {
      header = hashMapOf<String, Any?>()
      payload = hashMapOf<String, Any>().apply {
         put("title", "[공지] Android 15 업그레이드 패치 관련 공지")
         put("contents", "Android 15업그레이드 패치 관련 내용입니다.")
         put("postedAt", 1704692416000)
     }
   }
    options = HoneMobileOptions().apply {
         requestTimeout = 10000
         attachedFiles = hashMapOf<String, Any>().apply {
            put("icon", path)
        }
   }
}

DAPNet.request(activity, container,  {
          // TODO  
       }, {
          // TODO
       }, object: OnStatusListener() {
            override fun onStatus(status: Status, options: Options?) {
                when (status) {
                    Status.START  -> {

                   }
                   Status.PROGRESS -> {
                        var totalByte =  options?.totalByte
                        var currentByte =  options?.currentByte
                   }
                   Status.FINISH -> {

                   }
               }
           }
       })
Map<String, Object> payload = new HashMap<>();
payload.put("title", "[공지] Android 15 업그레이드 패치 관련 공지 ");
payload.put("contents", " Android 15 업그레이드 패치 관련 내용입니다.");
payload.put("postedAt", 170469241);

HoneMobileMessage message = new HoneMobileMessage();
message.setPayload(payload);

String path = "/data/user/0/com.hanwha.testhonemobile/files/hone_repository/bizAppId/test.png";
Map<String, Object> attachedFiles = new HashMap<>();
attachedFiles.put("icon", path);

HoneMobileOptions options = new HoneMobileOptions();
options.setRequestTimeout(10000);
options.setAttachedFiles(attachedFiles);

HoneMobileContainer container = new HoneMobileContainer<>();
container.setTarget("hub1");
container.setPath("/notice/boards");
container.setMethod("post");
container.setMessage(message);
container.setOptions(options);

DAPNet.request(activity, container, result -> {
           // Todo
       }, error -> {
           // Todo
       }, new OnStatusListener() {
           @Override
           public void onStatus(@NonNull Status status, @Nullable Options options) {
               switch (status) {
                   case START:
                       break;

                   case PROGRESS:
                       long totalByte = options.getTotalByte();
                       long currentByte = options.getCurrentByte();
                       break;

                   case FINISH:
                       break;
               }
           }
       });

Get

데이터 전체 조회

val container = HoneMobileContainer<Map<String, Any>>().apply {
    target = "hub1"
    path = "/notice/boards"
    method = "get"
    options = HoneMobileOptions().apply {
         requestTimeout = 10000
   }
}

DAPNet.request(activity, container,  {
          // TODO  
       }, {
          // TODO
       }, object: OnStatusListener() {
            override fun onStatus(status: Status, options: Options?) {
                when (status) {
                    Status.START  -> {

                   }
                   Status.FINISH -> {

                   }
               }
           }
       })
HoneMobileOptions options = new HoneMobileOptions();
options.setRequestTimeout(10000);

HoneMobileContainer container = new HoneMobileContainer<>();
container.setTarget("hub1");
container.setPath("/notice/boards");
container.setMethod("get");
container.setOptions(options);

DAPNet.request(activity, container, result -> {
           // Todo
       }, error -> {
           // Todo
       }, new OnStatusListener() {
           @Override
           public void onStatus(@NonNull Status status, @Nullable Options options) {
               switch (status) {
                   case START:
                       break;

                   case FINISH:
                       break;
               }
           }
       });

데이터 조회

val container = HoneMobileContainer<Map<String, Any>>().apply {
    target = "hub1"
    path = "/notice/boards"
    method = "get"
    message = HoneMobileMessage<Map<String, Any>>().apply {
      header = hashMapOf<String, Any?>()
      payload = hashMapOf<String, Any>().apply {
         put("id", 110)
     }
   }
    options = HoneMobileOptions().apply {
         requestTimeout = 10000
   }
}

DAPNet.request(activity, container,  {
          // TODO  
       }, {
          // TODO
       }, object: OnStatusListener() {
            override fun onStatus(status: Status, options: Options?) {
                when (status) {
                    Status.START  -> {

                   }
                   Status.FINISH -> {

                   }
               }
           }
       })
Map<String, Object> payload = new HashMap<>();
payload.put("id", 110);

HoneMobileMessage message = new HoneMobileMessage();
message.setPayload(payload);

HoneMobileOptions options = new HoneMobileOptions();
options.setRequestTimeout(10000);

HoneMobileContainer container = new HoneMobileContainer<>();
container.setTarget("hub1");
container.setPath("/notice/boards");
container.setMethod("get");
container.setMessage(message);
container.setOptions(options);

DAPNet.request(activity, container, result -> {
           // Todo
       }, error -> {
           // Todo
       }, new OnStatusListener() {
           @Override
           public void onStatus(@NonNull Status status, @Nullable Options options) {
               switch (status) {
                   case START:
                       break;

                   case FINISH:
                       break;
               }
           }
       });

파일 다운로드 요청

val container = HoneMobileContainer<Map<String, Any>>().apply {
    target = "hub1"
    path = "/notice/boards/110/icon.png"
    method = "get"
    options = HoneMobileOptions().apply {
         requestTimeout = 10000
   }
}

DAPNet.request(activity, container,  {
          // TODO  
       }, {
          // TODO
       }, object: OnStatusListener() {
            override fun onStatus(status: Status, options: Options?) {
                when (status) {
                    Status.START  -> {

                   }
                   Status.PROGRESS -> {
                        var totalByte =  options?.totalByte
                        var currentByte =  options?.currentByte
                   }
                    Status.FINISH -> {

                   }
               }
           }
       })
HoneMobileOptions options = new HoneMobileOptions();
options.setRequestTimeout(10000);

HoneMobileContainer container = new HoneMobileContainer<>();
container.setTarget("hub1");
container.setPath("/notice/boards/110/icon.png");
container.setMethod("get");
container.setOptions(options);

DAPNet.request(activity, container, result -> {
           // Todo
       }, error -> {
           // Todo
       }, new OnStatusListener() {
           @Override
           public void onStatus(@NonNull Status status, @Nullable Options options) {
               switch (status) {
                   case START:
                       break;

                   case PROGRESS:
                       long totalByte = options.getTotalByte();
                       long currentByte = options.getCurrentByte();
                       break;

                   case FINISH:
                       break;
               }
           }
       });

put

데이터 갱신

val container = HoneMobileContainer<Map<String, Any>>().apply {
    target = "hub1"
    path = "/notice/boards/110"
    method = "put"
    message = HoneMobileMessage<Map<String, Any>>().apply {
      header = hashMapOf<String, Any?>()
      payload = hashMapOf<String, Any>().apply {
         put("title", "[공지] Android 15 업그레이드 패치 관련 공지")
         put("contents", "Android 15업그레이드 패치 관련 내용입니다.")
         put("postedAt", 1704692416000)
     }
   }
    options = HoneMobileOptions().apply {
         requestTimeout = 10000
   }
}

DAPNet.request(activity, container,  {
          // TODO  
       }, {
          // TODO
       }, object: OnStatusListener() {
            override fun onStatus(status: Status, options: Options?) {
                when (status) {
                    Status.START  -> {

                   }
                   Status.FINISH -> {

                   }
               }
           }
       })
Map<String, Object> payload = new HashMap<>();
payload.put("title", "[공지] Android 15 업그레이드 패치 관련 공지 ");
payload.put("contents", " Android 15 업그레이드 패치 관련 내용입니다.");
payload.put("postedAt", 170469241);

HoneMobileMessage message = new HoneMobileMessage();
message.setPayload(payload);

HoneMobileOptions options = new HoneMobileOptions();
options.setRequestTimeout(10000);

HoneMobileContainer container = new HoneMobileContainer<>();
container.setTarget("hub1");
container.setPath("/notice/boards/110");
container.setMethod("put");
container.setMessage(message);
container.setOptions(options);

DAPNet.request(activity, container, result -> {
           // Todo
       }, error -> {
           // Todo
       }, new OnStatusListener() {
           @Override
           public void onStatus(@NonNull Status status, @Nullable Options options) {
               switch (status) {
                   case START:
                       break;

                   case FINISH:
                       break;
               }
           }
       });

파일 업로드 요청

val path = "/data/user/0/com.hanwha.testhonemobile/files/hone_repository/bizAppId/icon.png"

val container = HoneMobileContainer<Map<String, Any>>().apply {
    target = "hub1"
    path = "/notice/boards/110"
    method = "put"
    message = HoneMobileMessage<Map<String, Any>>().apply {
      header = hashMapOf<String, Any?>()
      payload = hashMapOf<String, Any>().apply {
         put("title", "[공지] Android 15 업그레이드 패치 관련 공지")
         put("contents", "Android 15업그레이드 패치 관련 내용입니다.")
         put("postedAt", 1704692416000)
     }
   }
    options = HoneMobileOptions().apply {
         requestTimeout = 10000
         attachedFiles = hashMapOf<String, Any>().apply {
              put("icon", path)
        }
   }
}

DAPNet.request(activity, container,  {
          // TODO  
       }, {
          // TODO
       }, object: OnStatusListener() {
            override fun onStatus(status: Status, options: Options?) {
                when (status) {
                    Status.START  -> {

                   }
                    Status.PROGRESS -> {
                        var totalByte =  options?.totalByte
                        var currentByte =  options?.currentByte
                   }
                    Status.FINISH -> {

                   }
               }
           }
       })
Map<String, Object> payload = new HashMap<>();
payload.put("title", "[공지] Android 15 업그레이드 패치 관련 공지 ");
payload.put("contents", " Android 15 업그레이드 패치 관련 내용입니다.");
payload.put("postedAt", 170469241);

HoneMobileMessage message = new HoneMobileMessage();
message.setPayload(payload);

String path = "/data/user/0/com.hanwha.testhonemobile/files/hone_repository/bizAppId/icon.png";
Map<String, Object> attachedFiles = new HashMap<>();
attachedFiles.put("icon", path);

HoneMobileOptions options = new HoneMobileOptions();
options.setRequestTimeout(10000);
options.setAttachedFiles(attachedFiles);

HoneMobileContainer container = new HoneMobileContainer<>();
container.setTarget("hub1");
container.setPath("/notice/boards/110");
container.setMethod("put");
container.setMessage(message);
container.setOptions(options);

DAPNet.request(activity, container, result -> {
           // Todo
       }, error -> {
           // Todo
       }, new OnStatusListener() {
           @Override
           public void onStatus(@NonNull Status status, @Nullable Options options) {
               switch (status) {
                   case START:
                       break;

                   case PROGRESS:
                       long totalByte = options.getTotalByte();
                       long currentByte = options.getCurrentByte();
                       break;

                   case FINISH:
                       break;
               }
           }
       });

Delete

데이터 삭제

val container = HoneMobileContainer<Map<String, Any>>().apply {
    target = "hub1"
    path = "/notice/boards/110"
    method = "delete"
    options = HoneMobileOptions().apply {
         requestTimeout = 10000
   }
}

DAPNet.request(activity, container,  {
          // TODO  
       }, {
          // TODO
       }, object: OnStatusListener() {
            override fun onStatus(status: Status, options: Options?) {
                when (status) {
                    Status.START  -> {

                   }
                   Status.FINISH -> {

                   }
               }
           }
       })
HoneMobileOptions options = new HoneMobileOptions();
options.setRequestTimeout(10000);

HoneMobileContainer container = new HoneMobileContainer<>();
container.setTarget("hub1");
container.setPath("/notice/boards/110");
container.setMethod("delete");
container.setOptions(options);

DAPNet.request(activity, container, result -> {
           // Todo
       }, error -> {
           // Todo
       }, new OnStatusListener() {
           @Override
           public void onStatus(@NonNull Status status, @Nullable Options options) {
               switch (status) {
                   case START:
                       break;

                   case FINISH:
                       break;
               }
           }
       });

Error Code

CodeCauseComment
E12800파라메터 값이 잘못되어 있을 경우 
E12801전달된 액션 값이 알 수 없는 액션일 경우 
E12802통신할 서버 이름이 null 이거나 빈 값이고 설정 정보에 없는 경우 
E12803서비스 정보가 null 이거나 빈 값인 경우 
E12804데이터 전송 방식이 post, get, put, delete 외 다른 값인 경우 
E12805타임아웃이 0~2147483647 사이의 정수값이 아닌 경우 
E12806서버로 업로드 할 첨부 파일 정보가  잘못되어 있을 경우 
E12807서버로 전송되는 패킷 공통 정보가 잘못되어 있을 경우 
E12808서버로 전송되는 전송 데이터가 잘못되어 있을 경우 
E12850실행 중 오류가 발생 되었을 경우 
E12851실행 중 업로드할 파일이 존재하지 않을 경우  
E12852서버로 부터 전달받은 응답 메시지가 없는 경우 
E12853서버로 부터 전달받은 응답 메시지가 잘못되어 있는 경우 
E12899알 수 없는 오류가 발생 되었을 경우