산체
40
2017-11-24 15:13:17 작성 2017-11-24 16:29:43 수정됨
1
2189

(안드로이드) retrofit2 post api 호출하는 법 (파싱이 안되는 문제)


안드로이드 retrofit2에서

json형태의 데이터가 있습니다. (밑에 데이터형태 첨부)


code번호 95번만 파싱을 하고싶은데 계속해서 전체 데이터가 다나오네요

조건은 post로 받아와야합니다 


도와주세요....


MainActivity

package com.example.everitime5.restapi4;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;


import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView textView = (TextView) findViewById(R.id.textView1);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(StationService.API_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        StationService stationService = retrofit.create(StationService.class);
        Call<Station> call = stationService.getStationPost(95);

        call.enqueue(new Callback<Station>() {
            @Override
            public void onResponse(Call<Station> call, Response<Station> response) {
                Station jo=response.body();
                String a="";

                for(int i = 0; i<jo.getResponse().size(); i++){

                    a+=jo.getResponse().get(i).getCode()+"                     ";
                    a+=jo.getResponse().get(i).getName()+"                     ";
                    a+=jo.getResponse().get(i).getEngName()+"\n";

                }
                textView.setText(a);
            }

            @Override
            public void onFailure(Call<Station> call, Throwable t) {

            }
        });
    }
}


Station 객체

package com.example.everitime5.restapi4;

import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;
import java.util.List;

import retrofit2.Response;

/**
 * Created by everitime5 on 2017-11-22.
 */

public class Station {
    public List<response> response =new ArrayList<>();
    public List<response> getResponse(){return response;}

    public class response{
        @SerializedName("code") int code;
        @SerializedName("name") String name;
        @SerializedName("engName") String engName;
        @SerializedName("tel") String tel;
        @SerializedName("address") String address;
        @SerializedName("transferParking") String transferParking;
        @SerializedName("bicycleShed") String bicycleShed;
        @SerializedName("locker") String locker;
        @SerializedName("camera") String camera;
        @SerializedName("police") String police;
        @SerializedName("islandWay") String islandWay;
        @SerializedName("elevator") String elevator;
        @SerializedName("origin") String origin;

        public int getCode(){return code;}
        public String getName(){return name;}
        public String getEngName(){return engName;}
        public String getTel(){return tel;}
        public String getAddress(){return address;}
        public String getTransferParking(){return transferParking;}
        public String getBicycleShed(){return  bicycleShed;}
        public String getLocker(){return locker;}
        public String getCamera(){return camera;}
        public String getPolice(){return police;}
        public String getIslandWay(){return islandWay;}
        public String getElevator(){return elevator;}
        public String getOrigin(){return origin;}
    }
}


StationService

package com.example.everitime5.restapi4;

import java.util.HashMap;
import java.util.Map;

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * Created by everitime5 on 2017-11-22.
 */

public interface StationService {
    public static final String API_URL="http://202.111.111.1:2000/play/";

    @FormUrlEncoded
    @POST("getStationInfo?key=123")
    Call<Station> getStationPost(
            @Field("code") int code
            );
}

json 형태의 데이터

{
    "status": 0,
    "error": null,
    "response": [
        {
            "code": 95,
            "name": "다대포해수욕장역",
            "engName": "Dadaepo Beach",
            "tel": "051-678-6195",
            "address": "부산광역시 사하구 다대로 지하 692",
            "transferParking": null,
            "bicycleShed": "O",
            "locker": "O",
            "camera": null,
            "police": null,
            "islandWay": null,
            "elevator": "O",
            "origin": "큰 포구가 많은 바다라는 데서 비롯되며 일본서기에는 다다라(多多羅)로 기록되어 있다. 이곳은 일찍부터 왜구의 출몰이 잦았으며 따라서 국방상 중요한 요새지였다. 조선 세종 때는 이곳에 수군만호영을 설치 수군 123인과 병선 9척을 배치하였고 성종 때는 높이 4m 둘레 560m의 다대포진을 축성한 바 있으며 임진왜란 때 다대포첨사였던 윤흥신(尹興信)과 그 동생 흥제(興悌)가 왜군과 접전을 벌여 전사한 유서 깊은 곳이다."
        }
    ]
}


0
0
  • 답변 1

  • GAN
    1k
    2017-11-27 12:18:49

    OkHttpClient 에 HttpLoggingInterceptor 추가하신 다음에 Http Request 가 정확히 가는지 확인 해보세요.
    https://stackoverflow.com/questions/32514410/logging-with-retrofit-2

    Http Request 가 정확히 갈 경우 서버 단에서 해당 요청에 관한 로그 찍어보세요.

    요청이 정확한데 다른 값이 넘어오는 거면 서버쪽 수정이 필요합니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.