안드로이드에서 네트워크 통신
에뮬레이터 세팅
라이브러리(자체적으로 쓰레드 프로그래밍이 되어있다)
- 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
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);
}
}