본문 바로가기
Android

Android 네트워크 통신

by leopard4 2023. 2. 3.

안드로이드에서 네트워크 통신


에뮬레이터 세팅


라이브러리(자체적으로 쓰레드 프로그래밍이 되어있다)
- Volley

https://google.github.io/volley/
- Retrofit2

Multi Processing
- 소프트웨어 앱 단위! cpu가 일을 나눠서 처리
- 앱을 동시에 여러개 실행 가능
Multi Threding 
- 앱 하나에서도 여러가지 일을 나눠서 처리

 

테스트용 JSON 데이터를 보내줄 사이트

https://jsonplaceholder.typicode.com

 

manifests 파일

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:targetSandboxVersion="31">

    <!-- 1. 인터넷 권한설정  -->
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:usesCleartextTraffic="true"
        android:networkSecurityConfig="@xml/network_security_config"
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.NetworkApp1"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

위 코드에서 이부분만 동일하게 하면됨

 

res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:tools="http://schemas.android.com/tools">
   <domain-config cleartextTrafficPermitted="false">
       <domain includeSubdomains="true">*.typicode.com</domain>
    </domain-config>
</network-security-config>

Gadle Scripts

implementation 'com.android.volley:volley:1.2.1'

추가후 sync

Volley

 

Main 액티비티 ( 서버로 요청해서 queue로 받는 예제) 

 

queue = 리스트 같은것

 

참고<리스트로 되어있는 JSON를 받을때는 JsonArrayRequest 를 이용함>

package com.leopard4.networkapp1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {

    TextView txtUserId;
    TextView txtId;
    TextView txtTitle;
    TextView txtBody;

    final String URL = "https://jsonplaceholder.typicode.com"; // 상수


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtUserId = findViewById(R.id.txtUserId);
        txtId = findViewById(R.id.txtId);
        txtTitle = findViewById(R.id.txtTitle);
        txtBody = findViewById(R.id.txtBody);

        // Volley 로 네트워크 통신한다.
        RequestQueue queue = Volley.newRequestQueue(this);

        JsonObjectRequest request = new JsonObjectRequest(
                Request.Method.GET,
                URL + "/posts/1",
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        Log.i("NETWORK_APP", response.toString());
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                }
        );
        
        // 이 코드가 있어야, 네트워크 실행한다.
        queue.add(request);

    }
}

 

 

JSON으로 잘받은것을 로그로 확인한다.
divider