반응형

script 단 안에


var getParam = function(key) {

var _parammap = {};

document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function() {

function decode(s) {

return decodeURIComponent(s.split("+").join(" "));

}


_parammap[decode(arguments[1])] = decode(arguments[2]);

});


return _parammap[key];

};


getParam("keyword"); //파라미터 불러오는거



반응형
,
반응형

실행url - http://localhost:8088/login/login.do?key=value


-javascript-

location.href -> http://localhost:8088/login/login.do?key=value

location.protocol -> http:
location.host -> localhost:8088 
location.pathname -> /login/login.do
location.search -> ?key=value


-jquery-

jQuery(location).attr('href') -> http://localhost:8088/login/login.do?key=value
jQuery(location).attr('protocol') -> http:
jQuery(location).attr('host') -> localhost:8088 
jQuery(location).attr('pathname') -> /login/login.do
jQuery(location).attr('search')-> ?key=  
jQuery(location).attr('search')-> ?key=


출처: http://beone.tistory.com/573

반응형
,
반응형

form의 element에 스크립트로 접근하는 방식들을 정리해보았다. 
각 브라우저별로 테스트 했으니 참고 하면 된다. 


IE : 익스플로러 7 
SF : 사파리 3 
FF : FireFox 3 
Chrome : 크롬

1. form의 element에 name으로 접근
<input type="text" value="우후훗!" name="txt1">
접근 방법실행브라우저
document.form1.txt1.valueIE, SF, FF, Chrome
document.getElementsByName('txt1')[0].valueIE, SF, FF, Chrome
document.getElementsByTagName('input').item('txt1',0).valueIE, SF, FF, Chrome
document.getElementById('txt1').valueIE
document.form1.namedItem('txt1').valueIE
document.form1.elements['txt1'].valueIE, SF, FF, Chrome
2. form의 element에 ID로 접근
<input type="text" value="우후훗!" id="txt2">
접근 방법실행브라우저
document.form1.txt2.valueIE, SF, FF, Chrome
document.getElementsByName('txt2')[0].valueIE
document.getElementsByTagName('input').item('txt2',0).valueIE, SF, FF, Chrome
document.getElementById('txt2').valueIE, SF, FF, Chrome
document.form1.namedItem('txt2').valueIE
document.form1.elements['txt2'].valueIE, SF, FF, Chrome
3. form에 중복된 이름의 element가 있을 경우 접근 방법
<input type="text" value="우후훗 1" name="txt3"><input type="text" value="우후훗 2" name="txt3">
접근 방법실행브라우저
document.getElementsByName('txt3')[0].valuefor (var i=0; i&lt;document.getElementsByName('txt3').length; i++) { alert(document.getElementsByName('txt3')[i].value); }IE, SF, FF, Chrome
document.getElementsByTagName('input').item('txt3',0).valuefor (var i=0; i&lt;document.getElementsByTagName('input').item('txt3').length; i++) { alert(document.getElementsByTagName('input').item('txt3',i).value); }IE, SF, FF, Chrome

form의 element가 중복 될 수도 있고 아닐수도 있으면 위의 2가지 방법중 하나를 이용해서 스크립트 작성하는게 편하다.

위의 2가지 접근방법말고 다른 스크립트 코드들은 element가 하나면 일반 element 되고 2개 이상이면 배열이 되어버린다.

이러한 element 중복여부의 대표적인 예가 행추가/행삭제이다. 행이 하나면 element가 하나여서 일반 element가 되는데 행이 두개 이상이면 element가 배열이 되어 버린다. 이 경우 스크립트를 이용해서 접근하려고 하면 해당 element가 하나일 때와 2개 이상 일때 구분해서 처리해 줘야한다.if (typeof(document.form1.txt3.length) == "undefined") { alert(document.form1.txt3.value); } else { for (var i=0; i&lt;document.form1.txt3.length; i++) { alert(document.form1.txt3[i].value); } }딱 봐도 엄청 귀찮은 작업이다. -_- 본인도 예전에는 저와같은 방식으로 이용했다 -_- 

위의 방식으로의 또 다른 문제점은 form의 select 요소에 접근 할 때이다. 위의 코드에서는 배열여부를 document.form1.txt3.length 의 typeof 값이 undefined 인지 여부를 통해서 판단했는데 select의 경우에는 위의 구문대로 하면 option의 갯수를 가져와 버린다. 그래서 select 는 또 다른 방식으로 배열 여부를 구분해야한다. 

그래서 얻은 결론은 행추가/행삭제 같은 element가 중복 될 수도 있고 안될 수도 있다면 위의 2 가지 방법으로 element에 접근하는 것이 편하다는 것이다


4. form의 element의 사용자 정의 속성 접근
<input type="text" myTag="우후훗!" name="txt4">
접근 방법실행브라우저
document.form1.txt4.myTagIE
document.getElementsByName('txt4')[0].myTagIE
document.getElementsByTagName('input').item('txt4',0).myTagIE
document.getElementById('txt4').myTagIE
document.form1.namedItem('txt4').myTagIE
document.form1.elements['txt4'].myTagIE
document.form1.txt4.getAttribute('myTag')모두 안됨
document.getElementsByName('txt4')[0].getAttribute('myTag')IE, SF, FF, Chrome
document.getElementsByTagName('input').item('txt4',0).getAttribute('myTag')IE
document.getElementById('txt4').getAttribute('myTag')IE
document.form1.namedItem('txt4').getAttribute('myTag')IE
document.form1.elements['txt4'].getAttribute('myTag')IE, SF, FF, Chrome

참고: http://www.mungchung.com/xe/lecture/4197

반응형
,
반응형

startWith: 문자열이 지정한 문자로 시작하는지 판단 같으면 true반환 아니면 false를 반환한다.(대소문자구별)

1
2
3
String str = "apple";
boolean startsWith = str.startsWith("a");
System.out.println("startsWith: " + startsWith);

결과값:true


endWith:문자열 마지막에 지정한 문자가 있는지를 판단후 있으면 true, 없으면 false를 반환한다.(대소문자구별)

1
2
3
String str = "test";
boolean endsWith = str.endsWith("t");
System.out.println("endsWith: " + endsWith);

결과값:true


equals:두개의 String에 값만을 비교해서 같으면 true, 다르면 false를 반환한다.(대소비교)

1
2
3
4
String str1 = "java";
String str2 = "java";
boolean equals = str1.equals(str2);
System.out.println("equals: " + equals);

결과값:true


indexOf:지정한 문자가 문자열에 몇번째에 있는지를 반환한다.

1
2
3
String str = "abcdef";
int indexOf = str.indexOf("d");
System.out.println("indexOf: " + indexOf);

결과값:3


lastindexOf:문자열에 지정한 문자가 마지막몇번째에 있는 int를 반환한다.

1
2
3
String str = "AdnroidApp";
int lastIndexOf = str.lastIndexOf("A");
System.out.println("lastIndexOf:" + lastIndexOf);

결과값:7


length:문자열의 길이를 반환한다.

1
2
3
String str = "abcdef";
int length = str.length();
System.out.println("length: " + length);

결과값:6


replace:문자열에 지정한 문자" "가 있으면 새로 지정한 문자" "로 바꿔서 출력한다.

1
2
3
String str = "A*B*C*D";
String replace = str.replace("*", "-");
System.out.println("replace: " + replace);

결과값: A-B-C-D



replaceAll:정규표현식을 지정한 문자로 바꿔서 출력한다.

1
2
3
String str = "AB CD";
String replaceAll = str.replaceAll("\\p{Space}", "*");
System.out.println("replaceAll: " + replaceAll);

결과값: AB*CD


split:지정한 문자로 문자열을 나눌수 있다.(배열로 반환)

1
2
3
String str = "A:B:C:D:abcd";
String[] split = str.split(":");
System.out.println("split: " + split[1]);

결과값:B


substring:문자열에 지정한 범위에 속하는 문자열을 반환한다.(시작범위에 값은 포함하고, 끝나는 범위에 값은 포함하지않는다.)

1
2
3
String str = "ABCDEF";
String substring = str.substring(0, 2);
System.out.println("substring: " + substring);

결과값:AB


toLowerCase: 문자열에 대문자를 소문자로 변환한다.

1
2
3
String str = "abcDEF";
String toLowerCase = str.toLowerCase();
System.out.println("toLowerCase: " + toLowerCase);

결과값:abcdef


toUpperCase:문자열에 소문자를 대문자로 변환한다.

1
2
3
String str = "abcDEF";
String toUppercase = str.toUpperCase();
System.out.println("toUppercase: " + toUppercase);

결과값:ABCDEF


toString:문자열을 그대로 반환해준다.

1
2
3
String str = "1234";
String toString = str.toString();
System.out.println("toString: " + toString);

결과값:1234


trim:문자열에 공백을 없에준다.

1
2
3
4
String s = "     java java java     ";
String v;
v = s.trim();
System.out.println("trim:" + v);

결과값:java java java


valueOf:지정한 개체의 원시 값을 반환

1
2
3
4
5
6
int i = 12345;
long l = 1L;
char c = '1';
System.out.println("valueOf: " + String.valueOf (i));
System.out.println("valueOf: " + String.valueOf (l));
System.out.println("valueOf: " + String.valueOf (c));

결과값:

valueOf: 12345

valueOf: 1

valueOf: 1


compareTo:두개의 String를 앞에서부터 순사적으로 비교하다가 틀린부분이 있으면 비교하는 String에 캐릭터값을 반환한다.(대소문자를 구별)

1
2
3
4
5
6
7
8
9
10
String str1 = "A";
String str2 = "B";
int compareTo = str1.compareTo(str2);<p></p>
if(compareTo > 0){<p></p>
       System.out.println(str1 + " > " +str2);
} else if (compareTo == 0){
       System.out.println(str1 + " = " +str2);
} else{
       System.out.println(str1 + " < " +str2);
}

결과값:

A < B


contains:두개의 String을 비교해서 비교대상 String을 포함하고 있으면true, 다르면 false를 반환한다.

1
2
3
4
String str1 = "abcd";
String str2 = "c";
boolean contains = str1.contains(str2);
System.out.println("contains: " + contains);

결과값:true


charAt:지정한 index번째에 문자를 반환한다.

1
2
3
String str = "charAt";
char charAt = str.charAt(2);
System.out.println("charAt: " + charAt);

결과값:a


concat:문자와 문자를 결합해준다.

1
2
3
4
String str1 = "Han";
String str2 = "SeeJin";
String concat = str1.concat(str2);
System.out.println("concat: " + concat);

결과값:HanSeeJin


format:서식문자열을 이용해서 서식화된 문자열을 반환한다.

1
2
3
int i = 123456789;
String str = String.format("%,d", i);
System.out.println("format: " + str);

결과값:123,456,789


matches:지정한 정규 표현과 일치 할때 true를 반환한다.

1
2
3
4
5
int i = 123456;
String str1 = String.format("%,d", i);
String str2 = "123456";
boolean matches = str1.matches(str2);
System.out.println("matches: " + matches);

결과값:false


replaceFirst:문자열에 지정한 문자" "가 있으면 첫번째만 새로지정한 문자" "로 바꿔서 출력한다.

1
2
3
String str = "Aman";
String replaceFirst = str.replaceFirst("A", "super");
System.out.println("replaceFirst: " + replaceFirst);

결과값:superman


참고 : http://sks3297.tistory.com/28

반응형
,
반응형


Blue

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" >

        <shape>

            <solid

                android:color="#449def" />

            <stroke

                android:width="1dp"

                android:color="#2f6699" />

            <corners

                android:radius="3dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

    <item>

        <shape>

            <gradient

                android:startColor="#449def"

                android:endColor="#2f6699"

                android:angle="270" />

            <stroke

                android:width="1dp"

                android:color="#2f6699" />

            <corners

                android:radius="4dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

</selector>

red

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" >

        <shape>

            <solid

                android:color="#ef4444" />

            <stroke

                android:width="1dp"

                android:color="#992f2f" />

            <corners

                android:radius="3dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

    <item>

        <shape>

            <gradient

                android:startColor="#ef4444"

                android:endColor="#992f2f"

                android:angle="270" />

            <stroke

                android:width="1dp"

                android:color="#992f2f" />

            <corners

                android:radius="3dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

</selector> 

purple

 

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" >

        <shape>

            <solid

                android:color="#a276eb" />

            <stroke

                android:width="1dp"

                android:color="#6a3ab2" />

            <corners

                android:radius="3dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

    <item>

        <shape>

            <gradient

                android:startColor="#a276eb"

                android:endColor="#6a3ab2"

                android:angle="270" />

            <stroke

                android:width="1dp"

                android:color="#6a3ab2" />

            <corners

                android:radius="4dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

</selector>

 

green

 

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" >

        <shape>

            <solid

                android:color="#70c656" />

            <stroke

                android:width="1dp"

                android:color="#53933f" />

            <corners

                android:radius="3dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

    <item>

        <shape>

            <gradient

                android:startColor="#70c656"

                android:endColor="#53933f"

                android:angle="270" />

            <stroke

                android:width="1dp"

                android:color="#53933f" />

            <corners

                android:radius="4dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

</selector>

 

yellow

 

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" >

        <shape>

            <solid

                android:color="#f3ae1b" />

            <stroke

                android:width="1dp"

                android:color="#bb6008" />

            <corners

                android:radius="3dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

    <item>

        <shape>

            <gradient

                android:startColor="#f3ae1b"

                android:endColor="#bb6008"

                android:angle="270" />

            <stroke

                android:width="1dp"

                android:color="#bb6008" />

            <corners

                android:radius="4dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

</selector>

 

black

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" >

        <shape>

            <solid

                android:color="#343434" />

            <stroke

                android:width="1dp"

                android:color="#171717" />

            <corners

                android:radius="3dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

    <item>

        <shape>

            <gradient

                android:startColor="#343434"

                android:endColor="#171717"

                android:angle="270" />

            <stroke

                android:width="1dp"

                android:color="#171717" />

            <corners

                android:radius="4dp" />

            <padding

                android:left="10dp"

                android:top="10dp"

                android:right="10dp"

                android:bottom="10dp" />

        </shape>

    </item>

</selector>

 

style

<style name="ButtonText">

    <item name="android:layout_width">fill_parent</item>

    <item name="android:layout_height">wrap_content</item>

    <item name="android:textColor">#ffffff</item>

    <item name="android:gravity">center</item>

    <item name="android:layout_margin">3dp</item>

    <item name="android:textSize">30dp</item>

    <item name="android:textStyle">bold</item>

    <item name="android:shadowColor">#000000</item>

    <item name="android:shadowDx">1</item>

    <item name="android:shadowDy">1</item>

    <item name="android:shadowRadius">2</item>

</style> 

 

sample layout

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"

    android:orientation="vertical">

   <Button android:text="Button" android:id="@+id/button1" android:background="@drawable/btn_red" style="@style/ButtonText"></Button>

   <Button android:text="Button" android:id="@+id/button2" android:background="@drawable/btn_blue" style="@style/ButtonText"></Button>

   <Button android:text="Button" android:id="@+id/button3" android:background="@drawable/btn_purple" style="@style/ButtonText"></Button>

   <Button android:text="Button" android:id="@+id/button4" android:background="@drawable/btn_green" style="@style/ButtonText"></Button>

   <Button android:text="Button" android:id="@+id/button5" android:background="@drawable/btn_orange" style="@style/ButtonText"></Button>

   <Button android:text="Button" android:id="@+id/button6" android:background="@drawable/btn_black" style="@style/ButtonText"></Button>

</LinearLayout> 

 

http://www.dibbus.com/2012/08/more-buttons/

https://code.google.com/p/android-gradients-sample/ 

반응형
,
반응형


 TextView[] mPreNumbers = new TextView[]{

(TextView) findViewById(R.id.tv_pre1),

(TextView) findViewById(R.id.tv_pre2),

(TextView) findViewById(R.id.tv_pre3),

(TextView) findViewById(R.id.tv_pre4),

(TextView) findViewById(R.id.tv_pre5),

(TextView) findViewById(R.id.tv_pre6)

        };

HashSet<Integer> set = new HashSet<Integer>();

 

while (set.size() < 6) {

set.add((int) (Math.random() * 44) + 1);

}

Set sortedset = new TreeSet(set) ;

Object[] result = sortedset.toArray();

for (int i = 0; i < result.length ; i++) {

mPreNumbers[i].setText(result[i].toString());

System.out.println(result[i]);

}

 

 

반응형
,
반응형

안드로이드에서 URL이미지 로딩을 위해 잘만들어진 오손소스 라이브러리를 소개한다.

 

Android Universal Image Loader

Android Universal Image Loader는 많은 앱에 적용되어 있고, Executor, 스레드 풀 크기, , Bitmap Options 등 변경할 수 있는 옵션이 있다. android.app.Application 클래스를 상속한 클래스에서 ImageLoader 객체를 초기화한 후 각종 옵션을 설정하고 사용할 수 있다.

 

AQuery

AQuery는 XML 파싱과 권한 관리 등 다양한 기능을 가진 라이브러리이나 이미지 로딩과 캐시 기능도 제공하기 때문에 분석 대상으로 선정했다. jQuery와 비슷한 메서드 체인 문법을 지원한다. 

 

droid4me Bitmap Downloader

droid4me Bitmap Downloader(이하 droid4me)도 Activity 라이프사이클 관리, 예외 처리, 로깅 등의 기능을 제공하는 라이브러리이나 이미지 처리와 캐시도 제공한다. 

 

Volley Image Loader

Volley Image Loader(이하 Volley)는 Google I/O 2013에서 발표된 뜨거운 라이브러리이다. HTTP API 호출에도 초점을 맞추고 있기 때문에 HTTP 클라이언트 라이브러리로 분류할 만도 하다. Google Play 앱에 쓰였으며, Google I/O에서 관련 세션의 발표자는 Volley의 성능이 다른 모든 라이브러리를 압도했다고 자신 있게 말했다. 

 

Novoda’s Android Image Loader

Novoda’s Android Image Loader(이하 Novoda)는 이미지 로딩의 기본적인 기능에 충실한 라이브러리이다. ImageView에 Tag를 설정하여, Tag에서 URL을 불러와서 다운로드하는 방식으로 동작한다. 

 

Picasso

Picasso는 근래에 많은 오픈 소스를 공개하고 있는 Square Inc.가 개발한 라이브러리이다. Square Inc.에서 개발한 HTTP 클라이언트 오픈 소스인 OkHttp를 HTTP 클라이언트로 활용한다. 메서드 체인 방식이라 직관적이고 사용하기 편리하다. 


반응형
,
반응형

AlarmActivity.java

 // 알람 등록

    private void setAlarm(Context context, long second){  

        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

 

        Intent intent = new Intent(AlarmSetting.this, AlarmReceive.class);

        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

         

//second​ 초후에 알람 울리게 설정(1000*실제 초 ex>5초 = 5000)

 

        alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + second, pIntent);

    }

     

    // 알람 해제

    private void releaseAlarm(Context context){  

        AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

 

        Intent Intent = new Intent(INTENT_ACTION);

        PendingIntent pIntent = PendingIntent.getActivity(context, 0, Intent, 0);

        alarmManager.cancel(pIntent);

         

        // 주석을 풀면 먼저 실행되는 알람이 있을 경우, 제거하고

        // 새로 알람을 실행하게 된다. 상황에 따라 유용하게 사용 할 수 있다.

//      alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 3000, pIntent);

    }

 

 

AlarmReceive .java

 public class AlarmReceive extends BroadcastReceiver {

 

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

Toast.makeText(context, "Alarm Received!", Toast.LENGTH_LONG).show();

 

NotificationManager notifier = (NotificationManager) context

.getSystemService(Context.NOTIFICATION_SERVICE);

 

Notification notify = new Notification(R.drawable.ic_launcher, "text", System.currentTimeMillis());

 

Intent intent2 = new Intent(context, CallResultActivity.class);

PendingIntent pender = PendingIntent.getActivity(context, 0, intent2, 0);

 

notify.setLatestEventInfo(context, "alimtitle", "hackjang", pender);

 

notify.flags |= Notification.FLAG_AUTO_CANCEL;

notify.vibrate = new long[] { 200, 200, 500, 300 };

// notify.sound=Uri.parse("file:/");

notify.number++;

 

notifier.notify(1, notify);

}

 

}

 

※여기서 중요한 것은 BroadcastReceiver  사용할때 manifast.xml에

<receiver android:name=".AlarmReceive"/> <--이것을 반드시 추가 할 것!!

 

 

 


반응형
,
반응형

http://www.netmite.com/android/mydroid/2.0/packages/apps/ 

 

다운 받는 방법을 모르겠다 ㅠㅠ소스 참고할때 유용할 듯


반응형
,
반응형

try {

PackageInfo info = getPackageManager().getPackageInfo(

            "패키지명", 

            PackageManager.GET_SIGNATURES);

for (Signature signature : info.signatures) {

MessageDigest md = MessageDigest.getInstance("SHA");

  md.update(signature.toByteArray());

  Log.d("debug", Base64.encodeToString(md.digest(), Base64.DEFAULT));

}

} catch (NameNotFoundException e) {

} catch (NoSuchAlgorithmException e) {

}

반응형
,