총 게시물 38,401건, 최근 7 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

AsyncTask 로 Json Parsing 받아서 다른 클래스로 전달하는 방법..

글쓴이 : String 날짜 : 2017-01-11 (수) 18:30 조회 : 1012
글주소 : http://www.androidside.com/B49/165783
 
  다이버후드스쿠버다이빙강습
스킨스쿠버 첫걸음,교육비 무료이벤트,1대1 교육가능,스케쥴조율가능,스쿠버다이빙강습
cafe.naver.com/diverhood
  세부최고시설 오션블루리조트
세부스쿠버다이빙 감성리조트 All In One 스쿠버교육,펀다이빙,숙식,픽업제공
www.oceanblue.co.kr
  스쿠버다이빙강습 홀릭다이브
채계적인PADI교육, 펀다이빙, 세부바다all in 1다이브리조트
www.holicdive.com
클릭초이스 등록


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang


(Request.class)
doInBackground,
SearchJsonModel mSearch = new SearchJsonModel();
if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
response = getResponse(con);
} else {
con.disconnect();
Log.v(APPTAG, "disconnect()");
}

JSONObject jsonObj = new JSONObject(response);
JSONArray jsonArray = jsonObj.getJSONArray("items");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObjSearch = jsonArray.getJSONObject(i);

mSearch.setTitle(jsonObjSearch.getString("title"));
mSearch.setLink(jsonObjSearch.getString("link"));
mSearch.setDesc(jsonObjSearch.getString("description"));
mSearch.setBlogger(jsonObjSearch.getString("bloggername"));
mSearch.setBloggerLink(jsonObjSearch.getString("bloggerlink"));
mSearch.setDate(jsonObjSearch.getString("postdate"));
}
처리 후,
MainActivity class 에서  mSearch.getDate()) 등 사용해서 값을 가져오려 하니 계속 null 값이 떨어지더라구요
Request.class 에서 jSON 값을 지정된 모델에 set 하면 다른 클래스에서 get 해서 값 가져올줄 알았는데
이상하게 안되고있는 상황입니다..
Request.class 에서 mSearch.getDate() 하니 정상적으로 저 클래스 안에는 get으로 가져오는걸 로그로 확인은 했습니다.
다른 클래스에서는 get으로 값을 못가져 오는데 .. onPostExecute 에서 전달해야하는 부분인가 해서 
만져보려해도 도무지 뭐부터 손대야하는지 감이 안잡혀서요 ㅠ
깔끔하게 값 전달할 수 있는 방법 있으면 답변 부탁드립니다.!



질문자가 자신의 포인트 5 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 4을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

OSKiller 2017-01-12 (목) 09:08
Request 가 AsyncTask인건가요?
그럼 MainActivity에 onPostExecute를 구현 하셨겠네요
onPostExecute에서 결과를 받아서 사용 하시면 될텐데요?

댓글주소 추천 0 반대 0
     
     
String 2017-01-12 (목) 09:25
[@OSKiller]
네 Request에 AsyncTask 가 작성되어있습니다.
Request에서 onPostExecute를 오버라이드해서 만들어 놓았는데, 값 전달은 어떤식으로 해야하나요..?
댓글주소 추천 0 반대 0
     
     
String 2017-01-12 (목) 09:53
[@OSKiller]
추가로 더 말씀드리면,
request class 에
@Override
protected void onPostExecute(String result) {
super.onPostExecute(response);
}
이런식으로 구현해 놓았구요, 
MainActivity 에서 request.onPostExecute(String); 를 어떻게 응용해서 모델에 저장된 값을
가져와야하는지 감이 안잡히네요 .. 
댓글주소 추천 0 반대 0
OSKiller 2017-01-12 (목) 09:59
AsyncTask의 사용법을 잘 모르시는것 같군요
댓글로 설명해드리긴 너무 기니
AsyncTask로 구글링 해서 사용법을 정확하게 숙지 하셔야 할듯 합니다
댓글주소 추천 0 반대 0
     
     
String 2017-01-12 (목) 10:39
[@OSKiller]
넵.. 답변 감사합니다.
방법을 찾아보던중 Request class 에
public RequestManager(String request, HttpListener listener)
{
response = request;
mListener = listener;
}
추가 하였고,
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
mListener.onHttpFinish(result);
}
에서 인터페이스로 doInBackground return 값을 저장합니다.
인터페이스에서는 public interface HttpListener {
    void onHttpFinish(String result);
}
로 만들어 놓았구요
MainActivity 에너는 
case R.id.btn1:
String result = "";
RequestManager request = new RequestManager(result, new HttpListener() {
String result 으로 doInBackground 에서 Return 한 Respon 값을 잘 가져오더라구요~
작성은 해서 정상적으로 동작은 하게 만들었지만 원리나 과정에 관해서는 아직 미숙합니다..
댓글주소 추천 0 반대 0
          
          
OSKiller 2017-01-12 (목) 11:15
[@String]
어떻게든 동작은 가능하지만 
원리를 알고 그렇게 구현 한것과 
하다보니 이렇게도 되더라는것은 다른것 같습니다

구글링 해보면 다른 사람들이 어떻게 사용하는지 찾아 볼수 있습니다
다른사람들의 코드와 나의 코드가 어떻게 다른지 비교해보는것도 좋은 공부가 될것입니다

댓글주소 추천 0 반대 0
               
               
String 2017-01-12 (목) 15:32
[@OSKiller]
네, 감사합니다.
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기