안드로이드에서는 보안상의 이유로 직접 DB에 접근할 수 없다.
그래서 서버에 있는 데이터를 json방식으로 안드로이드 내장 DB인 SQLite에 가져와서 처리 후,
처리한 데이터를 다시 JSON형태로 서버에 보내는 기능을 구현하였다.
💡 서버에서 JSON형태로 데이터 받아오기
@Override
public void onOrderDown() {
JSONObject params = new JSONObject();
String sql = "Delete From TB_ORDER_INFO";
db.execSQL(sql);
try {
params.put("data", "");
params.put("query", "select order_no, receiver_nm, tracking_no, prdt_nm, prdt_order_cnt, prdt_barcode from tb_order_info");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String resultMsg = RemoteUtil.call("/get_pda_OrderList?JsonParam=", params, "GET");
if (resultMsg == null) {
((fragment_masterReg) fragment).frag_showToast("서버실행 확인 또는 WIFI 연결을 확인 후 수신 하세요!");
return;
}
JSONObject jsonObject = null;
try {
resultMsg = JBUtil.jsonReplace(resultMsg);
jsonObject = new JSONObject(resultMsg);
String succ = jsonObject.getString("succ");
String data = jsonObject.getString("data");
data = JBUtil.unCompress(data);
if (succ.equals("true")) {
JSONArray arr = null;
arr = new JSONArray(data);
try {
String sql = "";
progressOrder = (ProgressBar) findViewById(R.id.progressBarOrder);
progressOrder.setProgress(0);
int j = 0;
progressOrder.setMax(arr.length());
for (int i = 0; i < arr.length(); i++) {
sql = "insert into TB_ORDER_INFO VALUES( " + arr.getJSONObject(i).getString("order_no") + ",'"
+ arr.getJSONObject(i).getString("receiver_nm") + "','"
+ arr.getJSONObject(i).getString("tracking_no") + "','"
+ arr.getJSONObject(i).getString("prdt_nm") + "','"
+ arr.getJSONObject(i).getString("prdt_order_cnt") + "','"
+ arr.getJSONObject(i).getString("prdt_barcode") + "')";
db.execSQL(sql);
progressOrder.incrementProgressBy(1);
}
((fragment_masterReg) fragment).frag_showToast("주문정보 마스터 수신완료.");
} catch (SQLiteException sqex) {
((fragment_masterReg) fragment).frag_showToast("주문정보 마스터 처리중 오류 발생.");
Log.e(TAG, sqex.toString());
}
}else{
((fragment_masterReg) fragment).frag_showToast("주문정보 마스터 수신중 오류 발생.");
Log.e(TAG, "주문정보 마스터 수신 오류");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
thread.start();
} catch (Exception e){
Log.e(TAG, e.getLocalizedMessage(), e);
}
}
💡 서버로 JSON형태로 데이터 전송하기
@Override
public void onDataSend() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String selectSql = "SELECT tracking_no, prdt_barcode, prdt_chk_cnt, reg_nm, reg_dt FROM tb_pda_order_data" ;
Cursor cursor = db.rawQuery(selectSql, null);
if (cursor.getCount() > 0) {
((fragment_orderList) fragment).frag_showToast("전송시작 !!\n전송 완료된 데이터는 PDA에서 삭제됩니다.");
try{
cursor.moveToFirst();
for (int i = 0 ; i < cursor.getCount(); i++) {
try {
JSONObject params = new JSONObject();
params.put("tracking_no", cursor.getString(0) );
params.put("prdt_barcode", cursor.getString(1) );
params.put("prdt_chk_cnt", cursor.getInt(2) );
params.put("reg_nm", cursor.getString(3) );
params.put("reg_dt", cursor.getString(4) );
String resultMsg = RemoteUtil.call("/update_pda_StockOut?JsonParam=", params, "GET");
if (resultMsg == null) {
((fragment_orderList) fragment).frag_showToast("서버실행 확인 또는 WIFI 연결을 확인 후 수신 하세요!");
return;
}
JSONObject jsonObject = null;
resultMsg = JBUtil.jsonReplace(resultMsg);
jsonObject = new JSONObject(resultMsg);
String succ = jsonObject.getString("succ");
if (succ.equals("true")) {
if ((i + 1) % 10 == 0 || cursor.getCount() == i + 1)
((fragment_orderList) fragment).frag_showToast(String.valueOf(i + 1) + " / " + String.valueOf(cursor.getCount()) + " 전송");
String delectSql = "Delete From tb_pda_order_data where tracking_no = '" + cursor.getString(0) +"' and prdt_barcode = '" + cursor.getString(1)+"'" ;
db.execSQL(delectSql);
}else {
((fragment_orderList) fragment).frag_showToast(jsonObject.getString("errMsg")+ "\n해당 데이터를 삭제 후 재 등록하시기 바랍니다.");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return;
}
} catch (JSONException e) {
((fragment_orderList) fragment).frag_showToast("주문정보 데이터 전송 중 오류 발생.");
Log.e(TAG, e.getLocalizedMessage(), e);
return;
}
cursor.moveToNext();
}
((fragment_orderList) fragment).frag_showToast("주문정보 데이터가 정상 전송 되었습니다.");
} catch (SQLiteException sqex) {
((fragment_orderList) fragment).frag_showToast("주문정보 데이터 전송 후 데이터 삭제 중 오류 발생.");
Log.e(TAG, sqex.getLocalizedMessage(), sqex);
}
}else{
((fragment_orderList) fragment).frag_showToast("전송할 데이터가 없습니다.");
return;
}
cursor.close();
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
'Android' 카테고리의 다른 글
[Android] Activity vs Fragment 뭐가 더 좋을까나 (0) | 2023.01.10 |
---|---|
[Android] 리스트뷰 사용하기 / Adapter 이용 (0) | 2023.01.10 |
[Android] Intent(인텐트)로 화면 간 이동 및 데이터 전달 (0) | 2023.01.09 |
[Android] SharedPreferences를 이용하여 아이디 저장하기 (0) | 2022.12.16 |
[Android/삽질 기록] 빌드시 버전 오류 (0) | 2022.12.14 |
댓글