안드로이드 앱에서 Retrofit을 활용한 API 통신 완벽 가이드

Android
Retrofit은 안드로이드 앱에서 서버와 쉽게 통신할 수 있는 가장 널리 사용되는 라이브러리입니다. 이번 포스트에서는 Retrofit을 활용하여 API 통신하는 방법을 기초부터 상세히 소개합니다. 1. Retrofit이란? Retrofit은 Square에서 만든 타입 안전(type-safe)의 REST 클라이언트로, HTTP 통신을 쉽게 해주는 라이브러리입니다. 코드 간결화 및 가독성 향상 비동기 처리 지원 2. 프로젝트에 Retrofit 추가하기 build.gradle(:app)에 의존성 추가: implementation 'com.squareup.retrofit2:retrofit:2.11.0'implementation 'com.squareup.retrofit2:converter-gson:2.11.0' 3. Retrofit 기본 구조 이해하기 기본 API 인터페이스 정의 예시: public interface ApiService { @GET("users/{id}") Call<User> getUser(@Path("id") int userId);} 4. Retrofit을 이용한 API 요청 구현 레트로핏 객체 생성 예제: Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build();ApiService apiService = retrofit.create(ApiService.class); API 요청 및 응답 처리 예제: apiService.getUser(1).enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { if(response.isSuccessful()) { User user = response.body(); // 성공적으로 응답받은 데이터 처리 } } @Override public void onFailure(Call<User> call, Throwable…
Read More

안드로이드 앱 출시 방법과 필수 체크리스트

Android
안드로이드 개발자로서 앱을 구글 플레이스토어에 출시하는 것은 매우 중요한 단계입니다. 본 포스팅에서는 앱을 성공적으로 출시하기 위한 방법과 필수 체크리스트를 안내합니다. 1. 구글 개발자 계정 생성하기 Google Play Console에 가입하고 개발자 등록비($25)를 결제합니다. 2. 앱 패키지 이름 결정 및 생성 고유하고 명확한 패키지 이름(예: com.company.appname)을 선택합니다. 3. 앱 콘텐츠 준비 스크린샷, 앱 아이콘, 설명 등 스토어 등록에 필요한 모든 콘텐츠를 준비합니다. 4. APK/AAB 파일 빌드 및 서명 Android Studio에서 앱을 빌드하고 디지털 서명을 하여 릴리즈 파일을 생성합니다. APK나 권장하는 AAB(Android App Bundle) 파일 형식으로 준비합니다. 5. 스토어 등록 및 정책 점검 플레이 콘솔에서 앱 등록 시 모든 세부사항(개인정보 처리방침, 등급, 타겟층)을 명확히 설정합니다. 앱 정책 위반 여부를 꼼꼼히 검토합니다. 6. 앱 출시 전 최종 점검 체크리스트 필수 권한 설정 확인 테스트 기기에서 앱 실행 테스트 앱 설명 및 스크린샷 정확성 검증…
Read More

안드로이드 웹뷰에서 화면 캡쳐하기

Android
아래의 코드는 테스트 코드 입니다. 현재 화면 전체를 캡쳐를 할 수가 없어서 지금 계속 테스트 중에 중간 저장을 위해서 코드를 기록을 해 놓습니다. wvPrint.loadUrl(Url); wvPrint.enableSlowWholeDocumentDraw(); wvPrint.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } @Override public void onPageFinished(WebView view, String url) { Log.i("deneb::", "page finished loading " + url); float scale = wvPrint.getScale(); int height = (int) (wvPrint.getContentHeight() * scale + 0.5); Bitmap bitmap = Bitmap.createBitmap(780, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); wvPrint.draw(canvas); // 파일 저장 String strFilePath = context.getCacheDir().toString(); Log.d("deneb::", "경로 :: " + context.getCacheDir().toString()); File fileCacheItem = new File(strFilePath, "print_page.png"); OutputStream out = null; try { fileCacheItem.createNewFile(); out = new FileOutputStream(fileCacheItem); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { out.close(); double…
Read More

안드로이드 웹뷰 기능 제작중

Android
package com.sihwawon.android import android.R.attr import android.R.attr.* import android.annotation.SuppressLint import android.app.AlertDialog import android.app.Dialog import android.content.DialogInterface import android.content.Intent import android.graphics.Bitmap import android.net.Uri import android.net.http.SslError import android.os.Build import android.os.Bundle import android.os.Environment import android.os.Message import android.provider.MediaStore import android.util.Log import android.view.View import android.view.ViewGroup import android.webkit.* import android.widget.ProgressBar import androidx.appcompat.app.AppCompatActivity import java.io.File import java.util.* import java.util.UUID import android.widget.Toast import android.view.Gravity import android.webkit.WebView import android.webkit.WebViewClient import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import android.webkit.ValueCallback import java.io.IOException import java.text.SimpleDateFormat import android.app.Activity import android.content.Intent.ACTION_VIEW import android.content.res.Configuration import android.text.TextUtils import android.webkit.WebChromeClient import android.os.Parcelable import androidx.core.content.FileProvider import android.webkit.WebChromeClient.FileChooserParams import androidx.annotation.RequiresApi import android.print.PrintAttributes import android.print.PrintManager import android.view.KeyEvent import kotlin.time.days class MainActivity : AppCompatActivity() { private lateinit var mWebView: WebView private var pWebView: WebView? = null private lateinit var mProgressBar: ProgressBar private var thisUrl: String? = null private var barcode: String? = "" private var popup: Boolean? =…
Read More

WebView 기능을 이용한 앱 개발중

Android
오랜만에 기술적인 내용이 아닌 일반적인 내용을 작성을 하게 되었습니다. 이번에 새롭게 공부를 시작하면서 Web과 App을 이용한 하이브리드(?) 용으로 App을 개발하게 되었습니다. 아직 시작 단계이지만 순항을 하는중이라고 생각을 합니다. 현재는 안드로이드의 기능중 WebView를 이용해서 순서 Web에 대한 표시를 하고, 웹에 포함된 기능중 일부에 대해서는 App과 사용작용으로 작동하는 기능을 개발중에 있습니다. 해당 기능이 되면은 말 그대로 하이브리드 형식이되지 않을까 싶습니다. 순수하게 웹으로만 작동하는것도 아니고, App만으로도 작동하지 않지만 서로가 상호 보완을 통해서 기능이 작동을 하리라고 생각이 됩니다. 아직 내용을 정리하기에는 부족하고 정리가 미흡하지만 조만간 해당 내용에 대해서 글을 작성하지 않을까 싶습니다. 카테고리를 만들고 나서 예고 차원에서 일단 기술적인 내용이 없는 글을 먼저 작성을 해서 신규 카테고리가 있다는것도 알리고 카테고리의 글을 하나씩 채워 나갈 생각 입니다. 잘하시는 분들이 볼 경우에는 많이 미흡할 수 있지만 이런 내용이 있다는 정도로 제가 정리해서 남기기 위한 글입니다. 이번에…
Read More