마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

[Android] 서버로부터 데이터를 한번에 모두 받아와야만 하나요?

0 추천
PHP서버로
GET방식으로 넘겨주는 parameter가 여러개 일 경우

즉, 똑같은 query로 인자값만 다르다면
각각 한번씩 DB를 들어갔다 와야 하는것인데.

retrofit2의 Call.enqueue()를 이용해서 받아올 때.
인자값으로 생성자가 들어가니까
DB로 부터 받은 값을 View에 셋팅을 할 수가 없어요..

(Inner Class라서 모든 코드 실행 후에 Inner Class안의  onSuccess를 호출하게 되기 때문에)

 

그럼 방법은
안드로이드에서는 Parameter를 한번에 몰아서 보내주고
서버에서는 그것을 For문으로  알아서 각각 Query에 맞게
DB에서 받아와서 JSON으로 출력해야만 하는건가요..?

 

제가 다시 읽어봐도 좀 두서없네요.
제 질문이 이해가 되실런지... ^^;

간단히 정리하면
안드로이드 로직에서 For문으로 연속적으로 각각의 값들을 받아서 넣으려면 어떻게 해야 하나요...?
목마른어린양 (960 포인트) 님이 2017년 11월 27일 질문
인자값으로 생성자가 들어가니까
DB로 부터 받은 값을 View에 셋팅을 할 수가 없어요.. ==> 이게 먼뜻일까요?

대충 이해하는 바를 설명하면, 서버에서 받은 데이터는 보통 json 일것이고 jackson 이나 gson 으로 파싱해서 사용하면 생성자와 상관이 없습니다.
죄송합니다. 생성자가 아니고 인스턴스입니다.
(제가 용어의 개념이 부족해서...)



______________________________________________________
private String getRateBy(String a, String b) {
                ......
call.enqueue(new Callback<Nation>() {
            @Override
            public void onResponse(Call<MyData> call, Response<MyData> response) {
//                MyData d = response.body();
//                result = d.rate;
            }
               .......

        });
    return result;  
}
______________________________________________________





인자값 안에서 new Callback.... 를 하게되면
익명클래스가 생성되는데.

익명클래스 안의 @Override된 메서드는
Activity의 모든 매서드가 실행된 후에 실행됩니다.




그렇다면
예를들어
Activity내의 어떤 매서드에 이런식으로 되어 있다면

______________________________________________________
private void test() {
‌int index=0;

for (Nation n : myArrayList) {
            n.rate = getRateBy(n.name, foo);          //서버에서 Data받아서 n.rate에 넣기.   
            myArrayList.set(index,n);                        //myArrayList에 현재 index의 data 수정하기.
            index++;
        }

}
______________________________________________________

myArrayList는 아무런 데이터변경이 없습니다.

왜냐면
값을 받아오는 매서드(getRateBy)내의
onResponse()이 호출되는 시점은
test()내의 for문이 모두 닫힌 뒤에 실행되기 때문에...



그러면
저기 for문 안의 값을 각각 DB에 들어갔다가 와야 할 상황이라면
어떤 식으로 짜야 하나요..?


서버로 GET방식 Array에 넣어서 보내주고
서버에서 그걸 loop돌려서 값을 받아온 것을 JSON으로 뿌려주는 방법밖에 없나요?


안드로이드에서는
인자값만 다른.  동일한 query를 이용하여 받아온 Data는
어떤식으로 setText를 해줘야 하나요...?

gson에 대한 질문이 아니예요...
질문에 관심가져주셔서 감사합니다.
관련 검색 키워드만이라도  알려주세요..ㅠㅠ
enqueue 는 async 로 데이터를 처리 합니다.

위의 코드는 sync 형태네요 getRateBy 의 결과 값을 listener 로 전달 받아서 처리 하시던지 아니면 retrofit 를 sync 로 바꾼 후 전체를 asynctask 에서 실행 하면 되겠습니다.
아. listener 만들어서 연결시켜도 되는건가요?
asynctask라면 handler로 시간차를 둬서 setText를 하면 된다는 거군요.

지금은 GET방식 배열로 넘겨서 서버에서 loop로 돌리는 걸로 해놨는데..
일단 listener로도 한번 만들어 봐야 겠네요.

답변 감사합니다.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...