@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.signature, container, false);
getDialog().setCanceledOnTouchOutside(false);
Bundle mArgs = getArguments();
imView = (ImageView) v.findViewById(R.id.btnCancel2);
mRegularInfo = mArgs.getParcelable("regular");
mLoginInfo = mArgs.getParcelable("login");
teamInfo = mArgs.getParcelable("team");
mRegularList = mArgs.getParcelableArrayList("regularList");
mInstance = this;
rmkLoad(); <<<---- 메인스레드
initView(v);
new DownloadFilesTask().execute(); <<<-----비동기 스레드
return v;
}
private void URLchange(String clientSn) {
}
private class DownloadFilesTask extends AsyncTask<String, Integer, Integer> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Integer doInBackground(String... params) {
AppLog.i(TAG, "GET URL : " + ClientSn);
String fileUrl = ClientSn; <<<----- 메인스레드 json에서 가져온 URL을 받아서 처리하여야함
URL myFileUrl = null; // URL 타입의 myFileUrl을 NULL로 초기화 시켜줍니다.
try {
myFileUrl = new URL(fileUrl); // 파라미터로 넘어온 Url을 myFileUrl에
// 대입합니다.
} catch (MalformedURLException e) // 예외처리를 해줍니다.
{
// Todo Auto-generated catch block
e.printStackTrace();
}
try {
// 실질적인 통신이 이루어지는 부분입니다.
// myFileUrl 로 접속을 시도합니다.
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
// int length = conn.getContentLength(); // 받아온 컨텐츠의 길이를 length
// 변수에
// 저장합니다.
InputStream is = conn.getInputStream(); // InputStream is 변수에
// 받아온
// InputStream을 저장합니다.
bmImg = BitmapFactory.decodeStream(is); // 받아온 이미지를 bmImg에
// 넣어둡니다.
imView.setImageBitmap(bmImg); // imView에 이미지를 셋팅합니다.
} catch (IOException e) // 예외처리를 해줍니다.
{
e.printStackTrace();
}
return 0;
}
}
private void rmkLoad() {
String action = KfsApplication.DEFAULT_URL + "SignatureRmk";
Map<String, String> params = new HashMap<String, String>();
params.put("ORD_NO", mRegularInfo.getSeq());
params.put("ORD_DT", mRegularInfo.getDlvDt());
mProgressDlg = new ProgressDialog(getActivity());
mProgressDlg.setMessage("데이터 로딩중...");
mProgressDlg.setIndeterminate(false);
mProgressDlg.setCancelable(false);
mProgressDlg.show();
action = KfsApplication.addParamsToURL(action, params);
JsonRequest req = new JsonRequest(action,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
AppLog.i(TAG, "" + response);
try {
ClientSn = response.getString("ClientSn"); <<<--- 메인스레드 json에서 URL 값을 가져오는부분
AppLog.i(TAG, "SEND URL : " + ClientSn);
if (!response.isNull("ClientNm")
&& !response.getString("ClientNm").equals(
"")) {
signName.setText(response.getString("ClientNm")
.replace("<br />", "\n"));
}
if (!response.isNull("Rk1")
&& !response.getString("Rk1").equals("")) {
remark_tv.setText(response.getString("Rk1")
.replace("<br />", "\n"));
}
if (!response.isNull("Rk2")
&& !response.getString("Rk2").equals("")) {
mProgressDlg.dismiss();
remark.setText(response.getString("Rk2")
.replace("<br />", "\n"));
} else {
mProgressDlg.dismiss();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mProgressDlg.dismiss();
String msg = error.getMessage();
new AlertDialog.Builder(getActivity()).setMessage(msg)
.setCancelable(false).setTitle("오류")
.setPositiveButton(R.string.ok, null).create()
.show();
}
});
KfsApplication.getInstance().addToRequestQueue(req);
}
필요한 소스부분인데요
네트워크 데이터 처리가 두가지입니다.
하나는 json으로 받아오고, 하나는 Async를 사용해서 처리중인데요.
문제는 json으로 데이터 a를 받아와서 그 a를 갖고 Async에서 처리를 해야하는데요...
문제는 Async가 처리되는속도가 더 빨라서 json에서 데이터를 받아오기전에 실행되므로 null 값이 들어갑니다.
로그찍어봐도 역시 순서가 바꼈구요..
그래서 json에서 데이터를 받아오고나서 Async스레드를 실행시켜야하는데요
어떻게 해야할까요.. 9시간째 해봤는데 초짜실력으로는 답이 안나와서 처음으로 질문드립니다.
대충 어떻게 하는진 알고있지만 손을 어디서부터 대야할지 구체적으로 가르쳐주시면 감사드리겠습니다.,,
직접적으로 코드를 명시해주시면 정말 감사하겠습니다.. ㅠㅠ 실력자분들 도와주세요