반응형

안녕하세요 봉자씨입니다.

위와 같은 에러가 난다면 일단 이래 저래 많은 시간을 소비하게 됩니다.

저의 경우는 아래와 같이 해결했습니다.

참고하세요

buildscript {
repositories {
jcenter()
maven {
url 'https://maven.fabric.io/public'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
classpath 'com.google.gms:google-services:4.3.3'
classpath
"io.realm:realm-gradle-plugin:5.13.1"
}
}

 

 

반응형
반응형

 

 

 

안녕하세요 봉자씨입니다

 

안드로이드 개발시에 androidx로 마이그레이션을 진행하다 보면 발생하는 에러 입니다.

해당 에러를 해결에 대한 상세한 내용은 아래의 url을 참고하시면 됩니다.

 

https://developer.android.com/studio/write/java8-support.

 

결국은 자바8이 필요하다는 것이구요 아래와 같이 추가해 주시면 됩니다.

 

build.gradle(Module: app) 영역에 android{ 내에 아래의 코드를 추가

    compileOptions {
        targetCompatibility = "8"
        sourceCompatibility = "8"
    }

 

그리고 다시 빌드를 하게 되면 정상적으로 빌드 됨을 확인 할 수 있어요.

 

반응형
반응형

안녕하세요, 봉자씨입니다.

 

Google Service를 사용하여 개발은 진행하였으나, google-services.json 해당 파일 내에선 패키지 이름(Package Name)을 변경하지 않았을 경우에 생기는 에러입니다.

결론으로 정리를 하면 아래와 같습니다.

리팩토링(Refactoring) =>패키지 이름 변경=> But! google-services.json내에 패키지 이름은 변경되지 않았기 때문입니다.

그럼 해결 방법은 일단 먼저 Android로 되어 있는 프로젝트 보기를 아래와 같이 Project로 바꿔줍니다.

 

그리고 나서 이제 해당 프로젝트로 들어가서 App을 선택하게 됩니다. 그리고 아래와 같이 google-services.json 파일을 선택합니다.

 

아래와 같이 파일이 열리는데, 이때 해당 파일의 패키지 이름을 바꿔주면 됩니다. 

 

변경 프로젝트가 이젠의 프로젝트의 이름만 바꾼거면 상관 없으나,

비슷한 프로젝트를 생성하려고 복사했다면, google-services.json을 다시 새롭게 생성해서 받으셔서 사용하시면 됩니다.

https://console.firebase.google.com/?hl=ko

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

여기 가셔서 프로젝트 생성하고 하면 google-services.json 이 파일을 하나 생성 되니 참고하세요

감사합니다.

반응형
반응형

안녕하세요, 봉자씨입니다.


안드로이드에서 api를 호출할 경우 자주 사용하는 retrofit2

이를 사용하다 보면 json데이터를 파싱하는 경우가 많습니다. 

이럴 경우 아래와 같이 사용하여 처리를 했습니다.


Retrofit client = new Retrofit.Builder()
.baseUrl("http://bongjacy.com/")
.client(new OkHttpClient()).addConverterFactory(GsonConverterFactory.create()).build();


이렇게 사용하다 보면 특정 데이터에서 null이 들어 오는 경우가 있습니다.

또는 숫자라고 생각하고 이를 String으로 받아서 바꿔 사용하고 있다면 Inteager.Valueof를 사용하다 보면 Exception이 발생하게 됩니다.

당연하죠.. 데이터가 없으니

이럴 경우 null일 때는 "0"으로 넣어야 하는 경우가 생기더라고요.(순전히 저의 경우지만...^^;;)

이를 해결하기 위해서 아래와 같은 소스 코드를 추가해 주시면 됩니다.

기본적 셋팅 부분은 아래와 같이 하시면 됩니다.


GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();
gsonBuilder.serializeNulls();
Gson gson = gsonBuilder.create();
Retrofit client = new Retrofit.Builder()
.baseUrl("http://bongjacy.com/")
.client(new OkHttpClient()).addConverterFactory(GsonConverterFactory.create(gson)).build();


그리고 두개의 클래스를 추가합니다.

첫번째 StringAdapter입니다.

import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;

import java.io.IOException;

public class StringAdapter extends TypeAdapter<String> {
public String read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return "0"; //여기서 null일 경우에는 0으로 치환해서 보내게 됩니다. 핵심!
}
return reader.nextString();
}
public void write(JsonWriter writer, String value) throws IOException {
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
}


두번째 NullStringToEmptyAdapterFactory입니다. 기본 셋팅 부분에 추가됐던 TypeAdapterFactory 클래스입니다.

import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;

public class NullStringToEmptyAdapterFactory<T> implements TypeAdapterFactory {
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {

Class<T> rawType = (Class<T>) type.getRawType();
if (rawType != String.class) {
return null;
}
return (TypeAdapter<T>) new StringAdapter();
}
}


이렇게 해주시면 null to zero가 되게 됩니다.

감사합니다.

글이 조금이나마 도움이 되셨다면 공감 부탁드립니다.

오늘도 좋은 하루 되세요!

감사합니다.

클릭 클릭 공감 클릭~~





반응형
반응형

안녕하세요, 봉자씨입니다.

안드로이드 스튜디오를 업데이트 하면서 갑자기 무한 루프가 진행되듯

Indexing/Scanning/Building

반복된다면 어떻게 해야 할가요?
이것 저것 해봐도 멈추지도 않고
버티고 해보려해도 한계에 달했습니다.

답은 은근히 간단합니다.
아래의 빨간 부분을 클릭해서 한번 정리하고 나시면
정상으로 돌아 옵니다.

글이 조금이나마 도움이 되셨다면 공감 부탁드립니다.

오늘도 좋은 하루 되세요!

감사합니다.

클릭 클릭 공감 클릭~~

반응형
반응형

안녕하세요, 봉자씨입니다.

프로젝트의 build.gradle에서 모든 compile을  implementation으로 변경했습니다.

그런데도 불구 하고 여전히 경고 메시지가 표시됩니다.

아래와 같은 경고를 확인 할 수 있습니다.

분명히 아래와 같이 바꿔 줬는데 계속적으로 에러가 발생하는 것을 확인 할 수 있습니다.

아래와 같이 바꿨는데도 에러가 계속적으로 발생하는 이유는 아래 클래스가 문제가 되는 것입니다.

com.google.gms:google-services



그래서 이를 바꾸기 위해서는

프로젝트의 build.gradle로 들어가서 클래스 패스에 적힌 google-service의 버전을 바꿔주면 됩니다.

buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:3.1.0'
}
}


아마 위와 같이 되어 있는 것을 아래와 같이 바꿔주면 에러가 사라집니다.

buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:3.2.0'
}
}


글이 조금이나마 도움이 되셨다면 공감 부탁드립니다.

오늘도 좋은 하루 되세요!

감사합니다.

클릭 클릭 공감 클릭~~





반응형
반응형


안녕하세요, 봉자씨입니다.


안드로이드에서 언어별로 설정을 달리하거나

설정을 변경 해야하는 경우가 있습니다.

그럴 경우 안드로이드에서 사용하고 있는 언어를 인지해야하는데

그때 사용하는 코드입니다.


Locale mSysLocale = getResources().getConfiguration().locale;
String strLanguage = mSysLocale.getLanguage();


스템에 설정된 언어 값을 가져오는데

ko 한글...

ja 일본...

ru 러시아...

vi 베트남...

이렇게 확인 하시면 됩니다.

Locale. 을 치면 더 많은 정보를 얻을 수 있습니다.

글이 조금이나마 도움이 되셨다면 공감 부탁드립니다.

오늘도 좋은 하루 되세요!

감사합니다.

클릭 클릭 공감 클릭~~





반응형
반응형

안녕하세요 봉자씨입니다.


ERROR

Caused by: android.os.TransactionTooLargeException: data parcel size 12652112 bytes



무슨 에러인가?

결론적으로 보면 안드로이드 인텐트로 넘기는 데이터의 크기가 오버 해서 발생하는 에러라고 있습니다. 하지만 안드로이드에서는 컴퍼넌트간에 인텐트로 데이터를 전달하는데 있어서 바인더 트랜잭션 버퍼안에 저장이 됩니다. 버퍼의 크기는 현재 1mb 모든 트랜잭션을 공유하게 됩니다. 여기서 발생한 TransactionTooLargeException  버퍼안에 저장을 없었기에 발생한 것입니다.


해결 방안!

인텐트로 넘기는 데이터를 최대한 줄여서 해당 오류에서 벗어 날 수 있습니다. 또는 인텐트보다 SharedPreference를 활용해 보는 것도 좋을 듯합니다.



참고 사이트



반응형
반응형

안녕하세요 봉자씨입니다.



ERROR

Error while executing: am start -n "your activity....." -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=your activity..... }

Error type 3

Error: Activity class {your activity.....} does not exist.

Error while Launching activity


무슨 에러인가?


결론적으로 보면 Activity가 없다는 것인데 분명 존재하는 경우에 발생하기도 합니다. 여러 원인에 의해서 발생하는 에러로 정확히 단정 지어 이야기 하기 힘든 에러입니다.



해결 방안!


해결 방안으로는 3가지 방법을 권해 드립니다.




첫번째 방법

1. android studio에서 빌드->clean project->

2. android studio 재시작

3. 빌드 -> rebuild project 후 재실행


두번째 방법

1. AndroidManifest 파일로 이동

2. versionName를 수정
    ex) android:versionCode="1"
          android:versionName="1.1"

세번째 방법(안드로이드 O?)

1. 폰의 슬라이드 바를 내립니다.

2. 유저를 손님으로 들어 가봅니다.

3. 거기 내가 삭제한 앱이 아직 존재하는지 확인하고 삭제 합니다.


감사합니다.




반응형
반응형

안녕하세요 봉자씨입니다.



ERROR


java.lang.IllegalArgumentException: Service Intent must be explicit: Intent


무슨 에러인가?


안드로이드 5.0 롤리팝 버전부터 인텐트 선언 시 명시적으로 선언이 안되게 되어 있어서 발생하는 에러



해결 방안!


 아래와 같이 선언하고 사용하신 다면 오류가 발생합니다.

startService(new Intent("com.bongs.kungkung.service.ScreenonoffService"));


그래서 위의 소스를 아래와 같이 변경 하시면 됩니다.

Intent service = new Intent(getApplicationContext(), ScreenonoffService.class);
service.setPackage("com.bongs.kungkung.service");
startService(service);


반응형