Gson을 사용하여 사용자 정의 클래스의 ArrayList를 JSON으로 직렬화하고 HTTP를 통해 데이터 전송

데이비드 벨라스케스

ArrayList의 데이터를 JSON으로 변환 한 다음 내 웹 서버로 보내고 싶습니다. 목록 mTeamDataList은 유형 ArrayList<TeamData>입니다.

TeamData클래스입니다 :

public class TeamData
{
    String mFullName;
    String mShortName;
    String mLeague;

    //constructor, getters and setters are here
}

addTeamsToDB()배열의 데이터를 웹 서버에 쓰는 책임 이있는 메서드가 있습니다. 지금까지 내가 가진 것은 다음과 같습니다.

public static void addTeamsToDB()
{
    if(mTeamDataList.size() == 0)
        return;

    HttpURLConnection urlConnection = null;
    String addTeamURL = "http://api.somewebsite.com/add_team.php";

    try
    {
        Gson gson = new Gson();
        URL urlObj = new URL(addTeamURL);
        urlConnection = (HttpURLConnection) urlObj.openConnection();
        urlConnection.setDoOutput(true);
        urlConnection.setRequestMethod("POST");
        urlConnection.connect();

        //I believe converting to json goes here

        OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());

    } 
    catch (IOException e)
    {
        e.printStackTrace();
    }
    finally
    {
        assert urlConnection != null;
        urlConnection.disconnect();
    }
}

SO에 대한 몇 가지 답변을 찾았지만 하나의 개체 또는 하드 코딩 된 데이터를 삽입하는 기본적인 예만 보여주었습니다. Gson을 사용하여 사용자 지정 데이터 유형 개체의 배열을 JSON으로 변환하는 것을 찾지 못했습니다.

이를 수행하는 방법이 있습니까 아니면 루프를 통해 배열의 각 항목을 수동으로 변환해야합니까?

나는 튜토리얼 을 따르고 있었지만 그는 NameValuePairs이것을 달성하기 위해 클래스를 사용하고 있습니다. 그러나 더 이상 사용되지 않으므로 대신 무엇을 사용 해야할지 모르겠습니다.

또한 튜토리얼은 내장 JSON 자바 라이브러리를 사용하므로 누군가가 Gson 방식을 대신 보여줄 수 있다면 매우 유용 할 것입니다.

빅시 더블유

클래스에 게시 한 것 이상이 없다면 toJson(Object src, Type typeOfSrc)ArrayList 에서 직접 Gson을 사용하는 데 문제가 없어야 합니다.

Type listType = new TypeToken<ArrayList<TeamData>>() {}.getType();
String json = gson.toJson(mTeamDataList, listType);

그 이유는 TeamData클래스에 일반 필드 만 있기 때문입니다 .

물론 JSON에 "키"를 표시하려면 @SerializedName클래스 멤버에 주석을 추가해야합니다 .

그런 다음 HttpUrlConnection을 사용하여 데이터를 보내려면 out변수 를 선언하는 줄을 다음과 같이 바꿉니다 .

OutputStreamWriter wr= new OutputStreamWriter(urlConnection.getOutputStream());
wr.write(json);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관