posted by 생존본능 2015.06.16 17:54


 안드로이드 푸시 (android push) MismatchSenderId  오류


 

 안드로이드의 푸시를 하다보면 많은 오류를 발생하는데,


 안드로이드 푸시 (android push) Unauthorized Error 401 오류


 오류를 겨우겨우 해결했더니 다음으로 나오는게, MismatchSenderId 오류...


 이 오류는 클라이언트에서 등록된 senderId가 일치 하지 않는다는 것입니다.


 그래서 결국엔 sender Id 받고 다시 하니 되네요,


 원 한번에 되는게 없네..ㅠ 


 

안드로이드 GCM PUSH 인증 받기 v.2015.06.16

 


posted by 생존본능 2015.06.16 17:17


 안드로이드 푸시 (android push) Unauthorized  Error 401 오류


 오류는 구글에 등록된 key 가 일치되지 않을경우 발생됩니다.


 체크해야 할부분은 구글에서 발급받은 key가 정상적으로 입력되었는지 체크하시고,


 구글에서 발급받은직후 바로 테스트하면 바로 업데이트가 되지 않아 발생되는 경우도 생깁니다.


 이럴땐 10~20분정도 기다리고 다시 테스트 하시면 정상적으로 됩니다.


 만약 그래서 똑같은 오류가 발생된다면 공개 api 액세스 key 를 삭제후에 키를 새로 발급받고


 10~20분 기다리고 테스트하시면 됩니다.



posted by 생존본능 2015.06.15 18:57


 안드로이드 사용시 자주 발생되는 out of memory 에 한가지 해결 방법



 SoftReference 



 메모리가 부족할경우, 담겨져 있는 데이터의 메모리를 비워 사용에 필요한 메모리를 확보한다.





HashMap<String, SoftReference<Bitmap>> bitmapMap = new HashMap<String,                                                         SoftReference<Bitmap>>();


bitmapMap.put(key, new SoftReference<Bitmap>(value));



posted by 생존본능 2015.06.12 15:53

android:adjustViewBounds="true"

<ImageView android:layout_width="match_parent" android:layout_height="wrap_content"  

            android:adjustViewBounds="true" />


posted by 생존본능 2015.05.04 14:49


 androidannotations 에서 많이 사용되는것 위주로 정리해 두겠습니다.





 1. @EActivity


 안드로이드에서 가장 많이 사용되는 어노텐션입니다.


 androidannotations 을 사용하는 activity를 명령하는 어노텐션 입니다.


@EActivity

public class MainActivity extends Activity {


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

}


 위와 같이 명명 하시면 됩니다.


 또한 layout과 같이 사용하시려면 


 

@EActivity( R.layout.activity_main )

public class MainActivity extends Activity {


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

}



 내용 처럼 @EActivity( R.layout.activity_main ) 으로 사용 하시면 됩니다.


 이렇게 적용하신 다음에


 mainifests에서 activity 명을 activity_ 으로 수정해주시면 됩니다.




 변경해 주시면 오류가 뜨는데 이때 Build > rebuild project 하시면 오류가 사라집니다.



 rebuild project를 하시면 보이지는 않지만 androidannotations에서 자동으로


 "activity_" 라는 클래스를 생성하기때문에 정상적으로 표시되는 것을 확인하실수있습니다.


 




 2. @AfterViews


@AfterViews는 view에 대한 모든 내용이 완료된 이후에 호출됩니다.



@EActivity( R.layout.activity_main )

public class MainActivity extends ActionBarActivity {



    @AfterViews

    protected void init()

    {

    }

}



 위 처럼 사용하시면 됩니다.


 주의 하실점은 androidannotations에서 MainActivity_라는 클래스를 생성하여


 MainActivity에 접근하기때문에 private를 사용할경우 오류가 발생합니다.


 public 또는 protected 만 사용이 가능합니다.





 3, @ViewById


 @ViewById는 안드로이드에서 사용했던 findViewById의 절차를 간소한 어노텐션입니다.


protected TextView tvMain;


    @Override

    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {

        super.onCreate(savedInstanceState, persistentState);

        tvMain = (TextView) findViewById( R.id.tvMain );

    }



 처럼 사용했던 기존에 방식에서 @ViewById를 사용함으로써 간소화 하는 방식입니다.



 사용법은


     @ViewById

    protected TextView tvMain;


 처럼 사용하시면 됩니다. 위처럼 사용하시면 R.id.tvMain 이란 객체를 찾아 tvMain 변수에 넣어줍니다.



    @ViewById ( R.id.tvMain )

    protected TextView tvMain;



 또한 위처럼도 사용이 가능합니다.




 4. @Click

 

 기존에 사용하던 버튼을 사용하던 방식에서 크게 간소화 되었습니다.


protected TextView tvMain;


    @Override

    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {

        super.onCreate(savedInstanceState, persistentState);

        tvMain = (TextView) findViewById( R.id.tvMain );

        tvMain.setOnClickListener( new View.OnClickListener(){

            @Override

            public void onClick(View v) {

                Log.i(TAG , "tvMainClick");

            }

        });

    }


 

 사용 방식은

 

@Click( R.id.tvMain )

    protected void tvMainClick()

    {

        Log.i(TAG , "tvMainClick");

    }


 입니다. 기존에 사용할때, 아이디 지정및 객체 생성등의 필요없는


 내용이 사라짐으로써 코드량이 확 주는 것을 확인 하실수 있습니다.



posted by 생존본능 2015.05.04 14:23



 안드로이드 스튜디오( Android Studio )에다가 androidannotations 적용하기가 여간 까다롭네요.


 이전에 올라왔던 글들을 보면 업데이트가 되서 그런지 않되는 경우가 많이 있구요,


 그래서 최신버전으로 다시 적용 방법을 보겠습니다.


 이글은 2015-05-04일에 작성되었습니다.


 

 우선 프로젝트를 생성한 이후 Gradle Scripts를 확인해 보시면 build에 관련하여


 두개의 gradle을 확인 하실 수있습니다.




 두개의 gradle중 Module: app 을 선택하여 진입합니다.



 


 프로젝트 생성시 기본적인 셋팅이 되어있는 것을 확인 하실수 있습니다.


 우리는 androidannotations를 셋팅하기위해서 gradle 의 내용을 바꾸어 줘야 합니다.


 


buildscript {

    repositories {

        mavenCentral()

    }

    dependencies {

        // replace with the current version of the Android plugin

        classpath 'com.android.tools.build:gradle:1.0+' // 버전에 맞게 변경.

        // the latest version of the android-apt plugin

        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'

    }

}


repositories {

    mavenCentral()

    mavenLocal()

}


apply plugin: 'android'

apply plugin: 'android-apt'

def AAVersion = '3.3' // 현재 최신버전 3.3으로 되어있으나 버전에 따라 변경.


dependencies {

    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile 'com.android.support:appcompat-v7:22.0.0'

    apt "org.androidannotations:androidannotations:$AAVersion"

    compile "org.androidannotations:androidannotations-api:$AAVersion"

    compile 'org.androidannotations:androidannotations:3.3'

}


apt {

    arguments {

        androidManifestFile variant.outputs[0].processResources.manifestFile

        resourcePackageName '[현재 프로젝트의 패키지]'

    }

}


android {

    compileSdkVersion 21

    buildToolsVersion '22.0.1'


    defaultConfig {

        applicationId "[현재 프로젝트의 패키지]"

        minSdkVersion 9

        targetSdkVersion 21

        versionCode 1

        versionName "1.0"

    }


    buildTypes {

        release {

            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android.txt'),

                    'proguard-rules.txt'

        }

    }


    packagingOptions {

        exclude 'META-INF/ASL2.0'

        exclude 'META-INF/LICENSE'

        exclude 'META-INF/license.txt'

        exclude 'META-INF/NOTICE'

        exclude 'META-INF/notice.txt'

    }


    sourceSets {

        main {

//            manifest.srcFile 'src/main/AndroidManifest.xml'

//            java.srcDirs = ['src/main/java']

//            resources.srcDirs = ['src/main/resources']

//            res.srcDirs = ['src/main/res']

//            assets.srcDirs = ['src/main/assets']

        }

    }




위에 내용으로 바꾸어 줍니다.


 버전에 맞게 내용을 변경 하시면 됩니다.


 그리고 [현재 프로젝트의 패키지]를 자신의 프로젝트에 맞게 변경하시면 됩니다.


 제가 사용하는 패키지는 "tc.wo.mbseo.applyandroidannotations" 이기 때문에 맞게 변경합니다.



apt {

    arguments {

        androidManifestFile variant.outputs[0].processResources.manifestFile

        resourcePackageName 'tc.wo.mbseo.applyandroidannotations'

    }

}



defaultConfig {

        applicationId "tc.wo.mbseo.applyandroidannotations"

        minSdkVersion 9

        targetSdkVersion 21

        versionCode 1

        versionName "1.0"

    }

 


 

 저장한 이후 rebuild project 합니다.

 




 이제 실행하시면 됩니다.






 위와 같이 나오면 정상적으로 적용된것입니다.




posted by 생존본능 2015.04.30 20:04



 


<a.php>

<?php

echo '감자';

?>



a.php라는 php 파일을 불러오기위해서는 include 라는 명령문을


 쓰신후 뒤에 경로를 입력하시면 됩니다.


include '[파일경로]'



<b.php>

<?php

include 'a.php';

echo '고구마';

?>



이후에 localhost/b.php 를 호출하시면 화면상에


 감자고구마


 라고 쓰여지는 페이지가 뜨는 것을 확인 하실수 있습니다.

posted by 생존본능 2015.04.29 18:54

http://sqlitebrowser.org/






사이트로 이동하여 os에 맞는 파일을 다운로드 이후 설치합니다.




 


open Database를 선택한 이후 [파일명].db 파일을 선택합니다.





 Browse Data 탭을 선택하시면 db를 확인하실수 있습니다.




 테이블을 선택하시면 만들어져있는 테이블을 확인하실수 있습니다.



posted by 생존본능 2015.04.29 18:46


 안드로이드 스튜디오에서 타겟에있는 DB 확인하는 방법.


 



아이콘 클릭.





DB 내용을 확인할 타겟을 지정합니다.








이후 File Explorer 를 선택하여 타겟 내부정보를 확인합니다.



경로 data/data/[어플리케이션 패키지]/databases/[지정한 db명].db 선택






db 파일을 선택하여 db 내용을 로컬로 가져와서 확인하시면 됩니다.


db 파일을 확인하는 방법이 궁금하시면,


sqlite database browse사용하기 



으로 가시면 됩니다.





posted by 생존본능 2015.04.27 16:30


build.gradle 파일 수정





buildscript {

    repositories {

        mavenCentral()

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:1.0.0'

        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'

    }

}


repositories {

    mavenCentral()

    mavenLocal()

}


apply plugin: 'com.android.application'



dependencies {

    compile fileTree(include: ['*.jar'], dir: 'libs')

    compile 'com.android.support:appcompat-v7:22.0.0'

    compile 'org.springframework.android:spring-android-rest-template:1.0.1.RELEASE'

}


apt {

    arguments {

        androidManifestFile variant.outputs[0].processResources.manifestFile

        resourcePackageName 'tc.wo.mbseo.springtest'

    }

}


android {

    compileSdkVersion 21

    buildToolsVersion "22.0.1"


    defaultConfig {

        applicationId "tc.wo.mbseo.springtest"

        minSdkVersion 9

        targetSdkVersion 21

        versionCode 2

        versionName "1.1"

    }


    buildTypes {

        release {

            minifyEnabled  false

            proguardFiles getDefaultProguardFile('proguard-android.txt'),

                    'proguard-rules.txt'

        }

    }


    packagingOptions {

        exclude 'META-INF/ASL2.0'

        exclude 'META-INF/LICENSE'

        exclude 'META-INF/license.txt'

        exclude 'META-INF/NOTICE'

        exclude 'META-INF/notice.txt'

    }

Structure

    sourceSets {

        main {

        }

    }

}



 이후 Build -> Rebuild Project 


티스토리 툴바