Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ์ปดํจํฐ๊ณผํ
- ์ํ
- Python
- ์๋ฐ์คํฌ๋ฆฝํธ
- Java
- JavaScript
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ๋ฐ์ํ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ComputerScience
- ํ๋ก๊ทธ๋๋ฐ
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ํ์ด์ฌ
- ์ค๋ธ์
- ์ค๋ผํด
- ์๋ฐ
- ์ฝ๋ฉ
- css
- database
- html
- ์ฑ
- K๋ฐฐํฐ๋ฆฌ
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ฐ๋ฐ
- ๋ ์
- ๋ผํ๋ผ์ค์๋ง๋
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๋ฆฌ์กํธ
Archives
- Today
- Total
JiYoung Dev ๐ฅ
[Android] HTTP ํต์ - Volley (2023.07.18) ๋ณธ๋ฌธ
์์ฑ๋ Request ๊ฐ์ฒด๋ Request Queue์ ์ถ๊ฐ
Request Queue : ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ฐ๋ ๋ ์์ฑํ์ฌ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต ๋ฐ์
** ์๋๋ก์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก https:// ๋ก ํต์ ํจ
Volley ์ฌ์ฉ ์ค์
https://developer.android.com/training/volley?hl=ko
Volley ํต์
** ์ฝ๋๊ฐ ์ ์์ฑ๋์ด ์๋๋ฐ ์๋์ด ๋์ง ์์ ๋
>> ์ดํ๋ฆฌ์ผ์ด์ ์ญ์ ํ ๋ค์ ์คํํด๋ณด๊ธฐ
>> ์ญ์ : ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ ๊ธธ๊ฒ ๋๋ฅธ ํ App info > Uninstall
package com.sjy.ex20230718
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import com.android.volley.Request
import com.android.volley.RequestQueue
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
class MainActivity : AppCompatActivity() {
lateinit var etUrl: EditText
lateinit var btnUrl:Button
lateinit var tvResult:TextView
lateinit var reqQueue:RequestQueue
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//์ปดํฌ๋ํธ ๊ฐ์ ธ์ค๊ธฐ
etUrl = findViewById(R.id.etUrl)
btnUrl = findViewById(R.id.btnUrl)
tvResult = findViewById(R.id.tvResult)
//reqQueue์์ฑ
// ํ์ฌ activicty๋ฅผ context๋ก
reqQueue = Volley.newRequestQueue(this)
//request์์ฑ : ์ฌ์ฉ์๊ฐ ์ฃผ์ ์
๋ ฅ ํ ์์ฒญ ๋ฒํผ์ ๋๋ ์ ๋
//๋ฒํผ์ด ํด๋ฆญ๋๋ฉด etUrl์ ์์ฑ๋ ์ฃผ์๋ฅผ ๊ฐ์ ธ์์ ์์ฒญ -> ์๋ต์ค๋ ๊ฐ ์ถ๋ ฅ
btnUrl.setOnClickListener {
//etUrl์ ์์ฑ๋ ํ
์คํธ ๊ฐ์ ธ์ค๊ธฐ -> ๋ฌธ์์ด ๋ณํ
val input = etUrl.text.toString()
//์์ฒญ
//request๊ฐ์ฒด ์์ฑ
//StringRequest : String ํ์
์ ์๋ต๊ฐ์ ๋ฐ์ ๋ ์ฌ์ฉํ๋ ๊ฐ์ฒด
// ๋จ์ : ๋์ฉ๋ ๋คํธ์ํฌ ์ฒ๋ฆฌ ๋ถ๊ฐ
val request = StringRequest(
Request.Method.GET, //์์ฒญ๋ฉ์๋(GET/POST)
input, //์์ฒญ ์ฃผ์ https://www.google.com
{ //์์ฒญ๊ณผ ์๋ต์ด ์ฑ๊ณตํ์ ๋ (200)
//response -> ์๋ฒ๊ฐ ์๋ตํด์ค ๊ฒฐ๊ณผ๊ฐ
response ->
Log.d("response", response.toString())
tvResult.text = response
},
{ //ํต์ ์คํจ
//error -> ๋ฐ์ํ ์ค๋ฅ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์
error ->
Log.d("error", error.toString())
Toast.makeText(this, "error ๋ฐ์", Toast.LENGTH_SHORT).show()
}
)
//์์ฑ๋ request ๊ฐ์ฒด -> request Queue์ ์ถ๊ฐ
// => ์ฐ๋ ๋๊ฐ ์์ฑ๋์ด ์๋ฒ๋ก ์์ฒญ, ์๋ต๋ฐ๊ธฐ ๊ฐ๋ฅ
reqQueue.add(request)
}
}
}
ํต์ ๋ฐ์ดํฐ ํ์
CSV
๊ฐ๋ณ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ํ์ฑ(ํต์ )ํ๊ธฐ๊ฐ ์ฝ์ง ์์
XML
๋ฐ์ดํฐ ํ์ฑํ๊ธฐ์ ํธ๋ฆฌํจ. JSON ํ์๋ณด๋ค ๋ฌด๊ฑฐ์
JSON
๋ฐ์ดํฐ ํฌ๊ธฐ๋ ๊ฐ๋ณ๊ณ , ํ์ฑํ๊ธฐ์๋ ํธ๋ฆฌํจ
๋ ์จ ๋ฐ์ดํฐ ๋ฐ๊ธฐ
package com.sjy.ex20230718
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.ListView
import android.widget.Toast
import com.android.volley.Request
import com.android.volley.RequestQueue
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import org.json.JSONObject
class WeatherActivity : AppCompatActivity() {
lateinit var btnWeather:Button
lateinit var listView: ListView
lateinit var reqQueue:RequestQueue
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_weather)
btnWeather = findViewById(R.id.btnWeather)
listView = findViewById(R.id.lvWeather)
//requestQueue ์์ฑ
reqQueue = Volley.newRequestQueue(this)
//๋ ์จ ๋ฐ์ดํฐ ๊ฐ์ง๊ณ ์ค๊ณ ์ถ์ ๋์ ์ ์ -> ๋ฐฐ์ด
val cityList = arrayOf("Gwangju", "Seoul", "Jeju-do", "London", "New York")
//WeatherVO ์ ์ฅ ๋ฐฐ์ด
val weatherList = ArrayList<WeatherVO>()
//๋ฒํผ์ด ํด๋ฆญ๋๋ฉด OpenWeatherAPI๋ฅผ ํตํด ํ์ฌ ๋ ์จ ๋ฐ์ดํฐ ์์ฒญ
//๋์ ์ด๋ฆ์ ๋ฐฐ์ด์ ์ ์ฅ >> ๋ค์ด์๋ ๋์์ ๊ฐ์๋งํผ ์์ฒญ์ด ์ผ์ด๋์ผํจ
btnWeather.setOnClickListener {
//.. : ๋ ๊ฐ ํฌํจ
//until : ๋ ๊ฐ ํฌํจ X
//index ๋ง์ง๋ง ๊ฐ์ size-1์ด๋ฏ๋ก until์ ์ฌ์ฉํด์ผ ํจ
for(i in 0 until cityList.size){
val request = StringRequest(
Request.Method.GET,
"https://api.openweathermap.org/data/2.5/weather?q=${cityList.get(i)}&appid=f074ee48da2e5d5517edac8b232392ec",
{
response ->
Log.d("response", response.toString())
val result = JSONObject(response)
val weather = result.getJSONArray("weather").get(0) as JSONObject
val state = weather.getString("main")
val main = result.getJSONObject("main")
val temp = main.getInt("temp")
//๋ฐ์ดํฐ VO๋ก ๋ฌถ๊ธฐ
//WeatherVO(cityList.get(i), state, temp-273)
//์์ฑ๋ VO๋ ๋ฐฐ์ด์ ์ ์ฅ
weatherList.add(WeatherVO(cityList.get(i), state, temp-273))
//์ด๋ํฐ ์์ฑ (listView์ ๋ฟ๋ ค์ฃผ๊ธฐ ์ํด)
//view์ ๊ฐ์ง๊ณ ์จ ๋ฐ์ดํฐ ์ ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํจ
val adapter = ArrayAdapter<WeatherVO>(applicationContext, android.R.layout.simple_list_item_1, weatherList)
//listView์ adaptor ์ ์ฉ
listView.adapter = adapter
},
{
error ->
Log.d("error", error.toString())
Toast.makeText(this, "error ๋ฐ์", Toast.LENGTH_SHORT).show()
}
)
reqQueue.add(request)
}
}
}
}
package com.sjy.ex20230718
//data : ์ผ๋ฐํด๋์ค๊ฐ ์๋ ๋ฐ์ดํฐ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์
//data class : POJO(Plain Old Java Object)
// - ํด๋์ค ๋ด์ ํ๋, ์์ฑ์, ๊ฒํฐ, ์ธํฐ๋ง ๊ฐ์ง๊ณ ์๋ ์์ฃผ ๊ฐ๋ฒผ์ด ํํ์ ์๋ฐ
// -> ํ๋๋ง ์์ฑ -> getter, setter ... ์๋ ์์ฑ
// ์กฐ๊ฑด
// 1) ์ต์ ํ๋์ ํ๋ผ๋ฏธํฐ(ํ๋)๊ฐ ์์ด์ผ ํจ
// 2) ํ๋ผ๋ฏธํฐ๋ val or var๋ก ์ ์ธ
// 3) abstract, open(์ฝํ๋ฆฐ์์ ๋ถ๋ชจ ํด๋์ค ์ง์ ์ ๋ถ์ฌ์ฃผ๋ ํค์๋),
// sealed(์์ํด๋์ค๋ฅผ ์ ํํ๋ ํค์๋),
// inner(ํด๋์ค ์์ ํด๋์ค(์ค์ฒฉ ํด๋์ค) ์ง์ ํค์๋) ์ฌ์ฉ ๋ถ๊ฐ
// 4) ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ ๋ฐ์ ์ ์์ (sealed ํด๋์ค๋ ์์ ๋ฐ์ ์ ์์)
data class WeatherVO(var city:String, var state:String, var temp:Int)
'full stack > ์๋๋ก์ด๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] POST ๋ฐฉ์ ํต์ (2023.07.19~20) (0) | 2023.07.19 |
---|---|
[Android] intent & listView ์ฌํ (2023.07.18) (0) | 2023.07.18 |
[Android] listView ๋ง๋ค๊ธฐ (2023.07.14) (0) | 2023.07.14 |
[Android] intent (2023.07.14) (0) | 2023.07.14 |
[Android] ์๋ฃ๊ตฌ์กฐ (2023.07.14) (0) | 2023.07.14 |