php 에서 json 파일 읽기 (2차원 배열)

프로그래밍/PHP|2021. 1. 5. 14:22
반응형

sysdocu.json


[

{ "table": "book", "id": "1", "title": "제목1", "body": "내용1" },

{ "table": "book", "id": "2", "title": "제목2", "body": "내용2" },

{ "table": "book", "id": "3", "title": "제목3", "body": "내용3" },

{ "table": "book", "id": "4", "title": "제목4", "body": "내용4" }

]



print.php


<?

$array = json_decode(file_get_contents("sysdocu.json", true));


foreach ($array as $row) {

    $table = $row->table;

    $id = $row->id;

    $title = $row->title;

    $body = $row->body;


    echo $table . "<br>";

    echo $id . "<br>";

    echo $title . "<br>";

    echo $body . "<br>";

}

?>



print.php 실행 결과


book
1
제목1
내용1
book
2
제목2
내용2
book
3
제목3
내용3
book
4
제목4
내용4



반응형

댓글()

안드로이드 제스처 이벤트 (GestureDetector) 예제

반응형

화면을 손으로 드래그시 이동 방향에 따라 이벤트가 발생하도록 하는 것이 제스처 이벤트 입니다.

아래 java 파일을 만들고 사용하고자 하는곳에서 불러오면 됩니다.



OnSwipeTouchListener.java


import android.content.Context;

import android.view.GestureDetector;

import android.view.GestureDetector.SimpleOnGestureListener;

import android.view.MotionEvent; import android.view.View;

import android.view.View.OnTouchListener;


public class OnSwipeTouchListener implements OnTouchListener {

    private final GestureDetector gestureDetector;

    public OnSwipeTouchListener (Context ctx){

        gestureDetector = new GestureDetector(ctx, new GestureListener());

    }


    @Override

    public boolean onTouch(View v, MotionEvent event) {

        return gestureDetector.onTouchEvent(event);

    }


    private final class GestureListener extends SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 100;

        private static final int SWIPE_VELOCITY_THRESHOLD = 100;


        @Override

        public boolean onDown(MotionEvent e) {

            return true;

        }


        @Override

        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

            boolean result = false;

            try {

                float diffY = e2.getY() - e1.getY();

                float diffX = e2.getX() - e1.getX();

                if (Math.abs(diffX) > Math.abs(diffY)) {

                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {

                        if (diffX > 0) {

                            onSwipeRight();

                        } else {

                            onSwipeLeft();

                        }

                    }

                    result = true;

                } else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {

                    if (diffY > 0) {

                        onSwipeBottom();

                    } else {

                        onSwipeTop();

                    }

                }

                result = true;

            } catch (Exception exception) {

                exception.printStackTrace();

            }

            return result;

        }

    }


    public void onSwipeRight() { }


    public void onSwipeLeft() { }


    public void onSwipeTop() { }


    public void onSwipeBottom() { }


}



필요한 Activity 에서 아래 코드를 이용해 사용 합니다.


View v_swipe = (View) findViewById(R.id.v_swipe);


v_swipe.setOnTouchListener(new OnSwipeTouchListener(DetailsActivity.this) {

            public void onSwipeRight() {

                // 왼쪽에서 오른쪽으로 제스쳐 사용시 동작할 코드 넣기

            }

            public void onSwipeLeft() {

                // 오른쪽에서 왼쪽으로 제스쳐 사용시 동작할 코드 넣기

            }

            public void onSwipeTop() {

                // 아래에서 위쪽으로 제스쳐 사용시 동작할 코드 넣기

            }

            public void onSwipeBottom {

                // 위에서 아래쪽으로 제스쳐 사용시 동작할 코드 넣기

            }

        }); 



반응형

댓글()

안드로이드 소프트 키보드 숨기기

반응형

View view = this.getCurrentFocus();

if (view != null) {  

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

}



반응형

댓글()

HttpURLConnection 을 이용해서 http status code 받아 오기

프로그래밍/Android (Java)|2020. 12. 21. 10:16
반응형

아래와 같은 내용으로 접근하려는 웹서버의 http status code 를 확인 할 수 있습니다.


StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);


URL url;

HttpURLConnection connection = null;


try {

    url = new URL("http://sysdocu.tistory.com");

    connection = (HttpURLConnection) url.openConnection();

    Toast.makeText (DetailsActivity.this, "응답 결과 : " + connection.getResponseCode(), Toast.LENGTH_SHORT).show();

} catch (IOException e) {

    e.printStackTrace();

} finally {

    if (connection != null) {

        connection.disconnect();

    }

}



반응형

댓글()

안드로이드 진동 기능 사용하기

프로그래밍/Android (Java)|2020. 12. 18. 15:34
반응형

진동 효과를 사용하기 위한 권한과 시간 설정만 하면 간단히 사용이 가능합니다.


1. AndroidManifest.xml

<uses-permission android:name="android.permission.VIBRATE"/>


2. MainActivity.java

특정한 패턴으로 반복 동작하고 싶은 경우 아래와 같이 사용하면 됩니다.


Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

long[] to_long = {0,  // 0초 대기, 2초 진동, 1초 대기, 2초 진동... 반복 (총 1분)

                            2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000,

                            2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000,

                            2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000,

                            2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000};다.

vibrator.vibrate(to_long, -1);  // 0 은 반복, -1 는 반복 안함


취소 방법

vibrator.cancel();

반응형

댓글()

안드로이드 모든 TextView, Button 폰트 일괄 변경 (Custom Font)

프로그래밍/Android (Java)|2020. 12. 18. 12:41
반응형

안드로이드 앱 내의 모든 TextView 나 Button 폰트를 일괄적으로 변경, 적용하려면 다음과 같이 진행합니다.



1. 폰트 저장


res/font 디렉토리 내에 ttf 파일을 저장합니다.


예) nanumgothicbold.ttf



2. 스타일 설정


values/style.xml 파일 또는 themes/themes.xml 파일 수정


<resources xmlns:tools="http://schemas.android.com/tools">

    <style name="Theme.Sysdocu" parent="Theme.MaterialComponents.DayNight.DarkActionBar">

        <item name="colorPrimary">@color/purple_500</item>

        <item name="colorPrimaryVariant">@color/purple_700</item>

        <item name="colorOnPrimary">@color/white</item>

        <item name="colorSecondary">@color/teal_200</item>

        <item name="colorSecondaryVariant">@color/teal_700</item>

        <item name="colorOnSecondary">@color/black</item>

        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>


        <!-- 아래 정의 해놓은 폰트 적용 -->

        <item name="android:textViewStyle">@style/nanumTextView</item>

        <item name="android:buttonStyle">@style/nanumButton</item>


    </style>


    <style name="nanumTextView" parent="android:Widget.TextView">

        <item name="android:fontFamily">@font/nanumgothicbold</item>

    </style>


    <style name="nanumButton" parent="android:Widget.Button">

        <item name="android:fontFamily">@font/nanumgothicbold</item>

    </style>


</resources>


이제 빌드 후 확인해보면, TextView 와 Button 에서 사용하는 폰트는 자동 적용된 것을 볼 수 있습니다.




반응형

댓글()

Android RecyclerView + ItemTouchHelper - 드래그 앤 드롭, 스와이프

프로그래밍/Android (Java)|2020. 12. 18. 08:45
반응형

* 참고

아래 소스대로 구현시 Activity 에서 item 값을 가져오고 싶을 경우에 사용 하면 됩니다.


String aa = ((TextView) mRecyclerView.findViewHolderForAdapterPosition(1).itemView.findViewById(R.id.tv_name)).getText().toString();


* 1 : array 번호

* name : tab_item.xml 에서 가져올 요소 이름


주의할 점은, 화면을 벗어난 item 의 정보를 가져올 경우 null 값이 반환 되어 오류가 발생됩니다.

그럴땐 아래와 같이 사용하면 됩니다.


for(int i = 0; i<Objects.requireNonNull(mRecyclerView.getAdapter()).getItemCount(); i++) {

            if (mRecyclerView.findViewHolderForLayoutPosition(i) != null) {

                View childView = Objects.requireNonNull(mRecyclerView.findViewHolderForLayoutPosition(i)).itemView;

                TextView tv_name = childView.findViewById(R.id.tv_name);

                String name = tv_name.getText().toString();

                Toast.makeText(getBaseContext(), "아이템 NAME : " + name, Toast.LENGTH_SHORT).show();

            }

        }




그럼 살펴보도록 합니다.




[출처] https://jroomstudio.tistory.com/27


RecyclerView + ItemTouchHelper -> Drag and Drop과 swipe 구현 

 

실행화면

 

자바 클래스 및 인터페이스

 

레이아웃

activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
        android:id="@+id/rv_tab_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:listitem="@layout/tab_item"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
 
 

tools:listitem -> 리사이클러뷰에 추가 될 레이아웃을 지정한다. 

 

tab_item.xml -> 추가될 아이템 레이아웃 

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
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:minHeight="60dp"
    android:orientation="horizontal"
    android:paddingEnd="20dp"
    android:paddingStart="20dp">
 
 
    <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:textColor="@android:color/primary_text_light"
        android:textSize="20sp"
        android:text="TAB NAME" />
 
 
    <FrameLayout
        android:id="@+id/drag_handle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_gravity="center"
            android:src="@drawable/ic_drag_handle" />
    </FrameLayout>
 
</LinearLayout>
 
 

 

아이템 레이아웃

TabItem.java 모델

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
public class TabItem {
 
    private String name;
    private int number;
 
    public TabItem(String name, int number){
        this.name = name;
        this.number = number;
    }
 
    public int getNumber() {
        return number;
    }
 
    public void setNumber(int number) {
        this.number = number;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
 
 

아이템 레이아웃에 셋팅 될 Tab name과 리스트 순번을 모델 객체가 저장하고 반환한다. 

  

ItemTouchHelperListener.java 인터페이스

1
2
3
4
public interface ItemTouchHelperListener {
    boolean onItemMove(int form_position, int to_position);
    void onItemSwipe(int position);
}
 
 

RecylcerView의 Adapter 클래스에서 상속받는다. 

onItemMove -> 아이템의 현재 위치와 이동 위치를 입력받아 아이템 리스트에의 위치를 수정하도록 구현 

onItemSwipe -> 아이템의 포지션값을 받아 해당 아이템을 Swipe할때 로직을 구현 

 

ItemTouchHelperCallback.java

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
31
32
33
34
35
36
37
38
39
public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
 
    private ItemTouchHelperListener listener;
 
    public ItemTouchHelperCallback(ItemTouchHelperListener listener) { this.listener = listener; }
 
    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView,
                                @NonNull RecyclerView.ViewHolder viewHolder) {
        int drag_flags = ItemTouchHelper.UP|ItemTouchHelper.DOWN;
        int swipe_flasg = ItemTouchHelper.START|ItemTouchHelper.END;
        return makeMovementFlags(drag_flags,swipe_flasg);
/* 참고하실 부분은 onMove와 onSwipe중 하나만 사용하겠다라고 하신다면 getMovementFlags에서 return을 해주는 makeMovementFlags함수의 인자로 0을 넣어주시면 됩니다. 예를 들면, onMove만 사용(onSwipe 사용안함) - return makeMovementFlags(drag_flags,0); onSwipe만 사용(onMove 사용안함) - return makeMovementFlags(0,swipe_flags); 출처: https://everyshare.tistory.com/27 [에브리셰어] */
    }
 
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView,
                          @NonNull RecyclerView.ViewHolder viewHolder,
                          @NonNull RecyclerView.ViewHolder target) {
        return listener.onItemMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());
    }
 
    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
        listener.onItemSwipe(viewHolder.getAdapterPosition());
    }
 
    @Override
    public boolean isLongPressDragEnabled() {
        return true;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

 

ItemTouchHelperCallback 생성자

-> 해당 클래스를 생성할 때 ItemTouchHelperListener를 입력받아 멤버 인스턴스로 지정하고 ItemTouchHelper.Callback이 지원하는 여러 메소드를 오버라이딩 하여 필요에 따라 사용한 후  결과값들을 반환해 준다.  아이템 위치변경 , 스와이프 , 롱클릭 등 다양한 기능을 지원한다.  

getMovementFlags

-> 리사이클러뷰와 리사이클러뷰 뷰홀더를 입력받는다.

-> drag 위치와 swipe 위치를 ItemTouchHelper에서 받아 셋팅한다.

-> makeMovementFlags() 메소드로 drag위치와 swipe 위치를 입력하여 현재 위치값을 int로 반환해준다.  

onMove

-> 리사이클러뷰,viewHolder, target(viewHolder 중 선택된 아이템)을 입력받아 움직임을 감지한다. 

-> ItemTouchHelperListener의 onItemMove메소드로 해당 아이템의 움직임을 감지한다.

-> onItemMove 메소드는 아이템이 움직이고 있는 가를 판별하고 boolean 값으로 반환한다.  

onSwiped

-> 리사이클러뷰의 뷰홀더와 움직일 방향을 입력받는다.

-> ItemTouchHelperListner의 onItemSwipe메소드에 움직일 방향을 입력하여 swipe를 구현한다.  

isLongPressDragEnabled() 

-> true를 반환하도록 설정하면 롱클릭을 감지한다. 

 

TabListAdapter.java

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class TabListAdapter extends RecyclerView.Adapter<TabListAdapter.ItemViewHolder>
                            implements ItemTouchHelperListener{
 
    private ArrayList<TabItem> items = new ArrayList<>();
 
    public TabListAdapter(){}
 
    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.tab_item, parent, false);
        return new ItemViewHolder(view);
    }
 
    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
    }
 
    @Override
    public int getItemCount() {
        return items.size();
    }
 
    public void setItems(ArrayList<TabItem> itemList){
        items = itemList;
        notifyDataSetChanged();
    }
 
    @Override
    public boolean onItemMove(int form_position, int to_position) {
        TabItem item = items.get(form_position);
        items.add(to_position,item);
        item.setNumber(to_position);
        notifyItemMoved(form_position, to_position);
        return true;
    }
 
    @Override
    public void onItemSwipe(int position) {
        items.remove(position);
        notifyItemRemoved(position);
    }
 
    public class ItemViewHolder extends RecyclerView.ViewHolder {
        TextView tabName;
        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);
            tabName = itemView.findViewById(R.id.name);
        }
        public void onBind(TabItem item,int position){
            tabName.setText(item.getName());
            item.setNumber(position);
        }
    }
}
 
 

-> RecyclerView.Adapter 를 상속받는다.

Adapter에는 RecyclerView.ViewHolder를 상속받은 내부 클래스를 구현하고 제네릭으로 지정하여 상속받아야 한다.  

-> ItemTouchHelperListener를 상속받아 onItemMove과 onItemSwipe를 오버라이딩하여 행동을 구현해준다. 

-> TabItem 모델을 제네릭으로 지정한 ArrayList를 생성한다. 

--------------------------------------------------------------

RecyclerView 상속 오버라이딩 메소드 

onCreateViewHolder

-> 리사이클러뷰에 추가될 item 레이아웃을 연결한다. 

-> ItemViewHolder 클래스에 View(item레이아웃)를 입력한다. 

onBindViewHolder 

-> ItemViewHolder와 아이템의 리스트상 위치를 입력받는다. 

-> ItemViewHolder 내부에 구현한 onBind 메소드에 아이템 리스트에서 포지션값으로 아이템을 선택하여 입력한다. 

getItemCount

-> items의 전체 갯수 숫자를 반환한다.

setItems

-> 메인액티비티에서 TabItem 객체를 생성한 후에 리스트를 입력하여 어댑터의 멤버 items에 매치시킨다. 

-> notifyDataSetChanged메소드로 데이터가 셋팅되었음을 알린다. 

--------------------------------------------------------------

ItemTouchHelperListener 오버라이딩 메소드

onItemMove

-> 아이템의 리스트상 현재위치와 움직일 위치를 입력받느다.

-> 입력받은 값으로 아이템의 이동을 구현한다. 

-> notifyItemMoved 메소드로 데이터가 이동함을 알린다. 

 

onItemSwipe

-> 포지션값을 입력받는다.

-> 포지션값으로 아이템리스트의 해당 포지션 아이템을 삭제한다.

-> notifyItemRemoved 메소드로 데이터가 삭제되었음을 알린다. 

 

ItemViewHolder 클래스

ItemViewHolder

-> 아이템 레이아웃의 name TextView 와 연결한다. 

onBind

-> TabItem객체에 셋팅된 값으로 각각의 레이아웃에 셋팅 한다. 

 

MainActivity.java

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class MainActivity extends AppCompatActivity {
 
    private RecyclerView mRecyclerView;
    private TabListAdapter mAdapter;
    private ItemTouchHelper mItemTouchHelper;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mRecyclerView = (RecyclerView) findViewById(R.id.rv_tab_list);
 
        LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext());
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(manager);
 
        mAdapter = new TabListAdapter();
        mRecyclerView.setAdapter(mAdapter);
 
        mItemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback(mAdapter));
 
        mItemTouchHelper.attachToRecyclerView(mRecyclerView);
 
        ArrayList<TabItem> items = new ArrayList<>();
        TabItem item1 = new TabItem("SUBSCRIBE",0);
        TabItem item2 = new TabItem("BEST",0);
        TabItem item3 = new TabItem("MUSIC",0);
        TabItem item4 = new TabItem("SPORTS",0);
        TabItem item5 = new TabItem("GAME",0);
        TabItem item6 = new TabItem("MOVIE",0);
        TabItem item7 = new TabItem("NEWS",0);
        TabItem item8 = new TabItem("LIVE",0);
        items.add(item1);
        items.add(item2);
        items.add(item3);
        items.add(item4);
        items.add(item5);
        items.add(item6);
        items.add(item7);
        items.add(item8);
 
        mAdapter.setItems(items);
 
    }
 
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

-> 리사이클러뷰를 생성한다.

-> 리사이클러뷰에 LinearLayoutManager를 활용해 속성을 지정한다. 

-> 리사이클러뷰에 TabListAdpater를 셋팅한다. 

-> 어댑터를 입력한 ItemTouchHelperCallback 클래스를 ItemTouchHelper 생성자에 입력하여 생성한다.

-> TouchHelper 의 attachToRecyclerView 메소드를 활용해 Touch를 구현할 리사이클러뷰를 연결한다. 

-> TabItem 을 제네릭으로 받는 ArrayList를 생성하고 임의의 값을 셋팅한다.

-> 어댑터의 setItems 메소드에 해당 ArrayList를 입력한다. 


[출처] https://jroomstudio.tistory.com/27





반응형

댓글()

activity 간 데이터 전달

프로그래밍/Android (Java)|2020. 12. 17. 10:20
반응형

[ 방법1 ]


보내는 Activity


Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

myIntent.putExtra("key", value);

CurrentActivity.this.startActivity(myIntent);


받는 Activity


@Override

protected void onCreate(Bundle savedInstanceState) {

    Intent intent = getIntent();

    String value = intent.getStringExtra("key");

}


[출처] https://stackoverflow.com/questions/4186021/how-to-start-new-activity-on-button-click



[ 방법2 ]


Intent 사용 없이 전역 변수에 넣어 어느 Activity 에서든 쉽게 데이터를 공유하고 싶을 경우

아래 포스팅을 참고 합니다.


https://sysdocu.tistory.com/1053



반응형

댓글()

안드로이드 CDT (CountDownTimer) 반복 작업을 종료하는 두 가지 방법

프로그래밍/Android (Java)|2020. 12. 14. 13:55
반응형

경우에 따라 반복문 내에서 반복적으로 작업을 진행하다가 조건에 맞아 종료하기도 하고,

외부 버튼을 통해 종료해야 할 경우도 있습니다.

두 가지 경우에 대해 종료하는 방법입니다.

 

int TTL = 1;


CountDownTimer CDT = new CountDownTimer(1000 * 86400 * 365, 1000) {
            public void onTick(long millisUntilFinished) {
                    result.setText(TTL + "\n");
                    // 지금이 10번째였다면 반복 중지 (CDT 내에서 종료할 경우)
                    if (TTL == 11) {
                            cancel();
                    }
                    TTL = TTL + 1;
            }
            public void onFinish() {
                // CountDownTimer 반복문 종료시 실행할 구문
            }
}; 


// 밖에서 버튼이나 특정 이벤트를 통해 종료할 경우
CDT.cancel();

 

 

결과

 

1

2

3

4

5

6

7

8

9

10

 

반응형

댓글()

안드로이드 네트워크 연결 여부 확인하기

프로그래밍/Android (Java)|2020. 12. 14. 12:56
반응형

int status = NetworkStatus.getConnectivityStatus(getActivity().getApplicationContext());


        // 모바일이나 wifi 에 연결이 된 경우

        if (status == NetworkStatus.TYPE_MOBILE || status == NetworkStatus.TYPE_WIFI) {

            Toast.makeText (this, "Network connection success", Toast.LENGTH_SHORT).show();


        // 네트워크 연결이 되지 않은 경우

        } else {

            Toast.makeText (this, "Network connection failed", Toast.LENGTH_SHORT).show();

        } 



반응형

댓글()

[Android, Java] String 클래스에서의 특수문자 인식

프로그래밍/Android (Java)|2020. 12. 11. 12:50
반응형

1. []으로 싸주면 문자 자체로 인식하는 것들. 


*  ⇒ [*] 

+  ⇒ [+] 

$  ⇒ [$] 

|  ⇒ [|] 



2. \\를 붙여줘야 하는 것들. 


( ⇒ \\( 

) ⇒ \\) 

{ ⇒ \\{ 

} ⇒ \\} 

^ ⇒ \\^ 

[ ⇒ \\[ 

] ⇒ \\] 



3. 자바의 특수문자는 \을 쓴다. 


 " ⇒ \" 



4. 나머지 부호들은 괜찮은 듯 하다. 

확인된 것. 


! # % & @ ` : ; - . < > , ~ ' 


ex ) 위에 놈들 다 지워 보자. 


    String c = "!\"#$%&(){}@`*:+;-.<>,^~|'[]"; 

    c = c.replaceAll("!\"#[$]%&\\(\\)\\{\\}@`[*]:[+];-.<>,\\^~|'\\[\\]", ""); 



출처: https://lazli.tistory.com/47 [lazli's Programming]



반응형

댓글()