반응형
반응형

#안드로이드에서 로딩화면 구현하기

    • 방법1)LoadingActivity → MainActivity
    • 방법2)MainActivity → LoadingActivity → MainActivity


방법1) LoadingActivity → MainActivity

1) LoadingActivity 생성 

package com.example.n3815.new_app;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import com.example.n3815.new_app.assembly.AssemblyListActivity;


/**

 * Created by N3815 on 2017-01-31.

 */

public class LoadingActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_loading);

        startLoading();

    }

    /**

     * 로딩을 위한 메소드 구현 - 2초후에 이동

     */

    private void startLoading() {

        Handler handler = new Handler();

        handler.postDelayed(new Runnable() {

            @Override

            public void run() {

                Intent intent = new Intent(getBaseContext(), AssemblyListActivity.class);

                startActivity(intent);

                finish();

            }

        }, 2000);

    }

}


run() 부분에 시작할 Activity 설정


또는 

/**
 * Created by N3815 on 2017-01-31.
 */
public class LoadingActivity extends Activity {
    ArrayList<AssemBean> assemblyList = new ArrayList<AssemBean>(); // 전체 국회의원의 정보를 담는 객체
    // API 호출을 위한 Client
    DefaultRestClient<AssemblyService> restClient;
    // 국회의원 REST API URL SERVICE
    AssemblyService assemblyService;
    boolean isCall = false; // 호출이 되었는지 확인
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loading);
        try {
            if(!isCall) {
                // 전체 국회의원 리스트 가져오기
                AssemblyList();
            }
        } catch (IOException e) {
            // 다시 요청시도 하기
            Toast.makeText(LoadingActivity.this ,"[Loading] Error(10003-요청 오류)",Toast.LENGTH_LONG).show();            
  e.printStackTrace();
        }
}
    /**
     * 국회의원 목록 가져오기 I/F
     */
    public void AssemblyList() throws IOException {
        isCall = true;
        restClient = new DefaultRestClient<>();
        assemblyService = restClient.getAssemblyClient(AssemblyService.class);
        Call<Items> call = assemblyService.getMemberCurrStateList(1, 300);
        call.enqueue(new Callback<Items>() {
            @Override
            public void onResponse(Call<Items> call, Response<Items> response) {
                try{
                    if(response.isSuccessful()){
                        // 전체 대상자 추가하기
                        for(AssemBean userInfo : response.body().getItems()){
                            // 초성정보 객체에 미리 넣어주기
userInfo.setInitialEmpNm(SearchCommon.getInitialSound(userInfo.getEmpNm().charAt(0)));
assemblyList.add(userInfo);
 }
 Log.v("[AssemblyListActivity]","[API 호출 성공]: "+assemblyList.size()); 
 Log.v("[AssemblyListActivity]","[Adapter에 전달]: 모든 국회의원 정보를 조회 완료하였습니다.");

 if(assemblyList.size() == 300){
        Intent intent = new Intent(LoadingActivity.this, AssemblyListActivity.class)
        intent.putExtra("assem", assemblyList);
        startActivity(intent);    
 }
                    }
}catch (Exception e){
                    Toast.makeText(LoadingActivity.this ,"[Loading] Error(10000-파싱 오류)",Toast.LENGTH_LONG).show();
                    e.printStackTrace();
                }
}
            @Override
            public void onFailure(Call<Items> call, Throwable throwable) {
                if(throwable instanceof SocketTimeoutException){
                    // 다시 요청시도 하기
                    Toast.makeText(LoadingActivity.this ,"서버가 불안정합니다. 다시 시도해주세요.",Toast.LENGTH_LONG).show();
                }else{
                    // 다시 요청시도 하기
                    Toast.makeText(LoadingActivity.this ,"[Loading] Error(10001-요청 오류)",Toast.LENGTH_LONG).show();
                }
                throwable.printStackTrace();
            }
        });
    }

주의할 것! finish()가 없을 경우, 뒤로가기 버튼 클릭시 로딩화면으로 다시 되돌아간다.


2) android Manifest.xml 파일에 시작 Activity 수정

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

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

    package="com.example.n3815.new_app">

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

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

    <application

        android:name="android.support.multidex.MultiDexApplication"

        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

        android:label="@string/app_name"

        android:supportsRtl="true"

        android:theme="@style/Theme.AppCompat.Light.NoActionBar">

        <activity android:name=".LoadingActivity" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <activity android:name = ".SubActivity"/>

        <activity android:name = ".MainActivity"/>

        <activity android:name = ".list.ListActivity"/>

        <activity android:name = ".customList.CustomListActivity"/>

        <activity android:name = ".assembly.AssemblyListActivity"/>

        <activity android:name = ".assembly.AssemblyDetailActivity"/>

        <activity android:name = ".assembly.AssemblySearchActivity"/>

    </application>

</manifest>


시작 Activity를 LoadingActivity로 변경


방법2) MainActivity → LoadingActivity → MainActivity

나중에 정리하자.



참고 링크


반응형
반응형

오라클 DB 계정 생성 및 사용자 확인하는 방법

오라클의 관리자 계정은 DBA 권한을 가지고 있어야 하며, 오라클 설치 시 기본적으로 Scott(사용자)가 자동 생성됨


서버에서 ORACLE 접속시

  su - oracle

  sqlplus '/as sysdba'


현재 생성된 계정 확인

SELECT * From DBA_USERS;

SELECT * FROM ALL_USERS;


사용자에게 부여된 시스템 권한 확인

SELECT * FROM DBA_SYS_PRIVX

WHERE GRANTEE = '사용자명';


사용자에게 부여된 롤 확인

SELECT * FROM DBA_ROLE_PRIVS

WHERE GRANTEE = '사용자명' ;


사용자에게 부여된 롤에 부여된 시스템 권한 확인

SELECT * FROM DBA_SYS_PRIVS

WHERE GRANTEE = '롤명' ;


타 사용자에게 부여한 객체(테이블 등) 권한 확인

SELECT * FROM DBA_TAB_PRIVS

WHERE OWNER = '테이블소유자명' ;
또는
SELECT * FROM DBA_TAB_PRIVS
WHERE GRANTEE = '권한부여자명' ;


사용자가 소유한 모든 테이블 확인

SELECT 테이블명 FROM USER_TABLES;


계정 생성

CREATE USER 계정명 IDENTIFIED BY 비밀번호;


계정 비밀번호 변경

ALTER USER 계정명 IDENTIFIED BY 변경할비밀번호;

  • 변경할 비밀번호는 문자로 시작해야합니다.

계정 권한 할당

GRANT 권한명 TO 계정;


시스템 권한

스템 권한 종류

 내용

 CREATE USER

 데이터 베이스 유저 생성 권한

 SELECT ANY TABLE

 모든 유저의 테이블 조회 권한

 CREATE ANY TABLE

 모든 유저의 테이블 생성 권한

 CREATE SESSION

 데이터베이스 접속 권한

 CREATE TABLE

 테이블 생성 권한

 CREATE VIEW

 뷰 생성 권한

 CREATE PROCED USER

 프로시저 생성 권한

 CREATE SEQUENCE

 시퀀스 생성 권한

 SYSDBA

 데이터베이스를 관리하는 최고 권한

 SYSOPER

 데이터베이스를 관리는 권한


REVOKE 권한 제거
REVOKE 권한명 (시스템 명령 또는 SQL 명령) ON 테이블명 FROM 계정;


계정 삭제

DROP USER 계정명 CASCADE;


참고 링크


반응형

'◼︎ DB' 카테고리의 다른 글

[Mysql] 한글 인코딩 설정  (2) 2017.05.31
[Mysql] mysql 콘솔로 접속하는 방법  (0) 2017.05.31
[Mysql] root 패스워드 분실시 변경방법  (0) 2017.02.06
[Mysql] Mysql 버전 확인  (0) 2017.01.31
반응형

mysql 버전 확인하는 방법


방법 1) 서버에서 확인 

[root] mysql -V

[root] mysql --version


방법 2) mysql DB 접속해서 확인

select version(); 또는 show variables like 'version';


방법 3) rpm

[root] rpm -qa | grep ^mysql


반응형
반응형

리눅스 서버에서 메모리 용량 확인

[root] cat /proc/meminfo | grep MemTotal


ram memory & swap 사용량 확인

[root] free

  • -b, -k, -m, -g : 단위
  • -t : ram 메모리 총 용량 + swap 


메모리 점유율 확인

[root] top



참고 링크


반응형
반응형
CPU 정보 확인
[root] cat /proc/cpuinfo

CPU 코어 전체 개수 확인 

[root] grep -c processor /proc/cpuinfo
4
 즉 2 코어

  • CPU core 수를 셀 수 있다.
  • 하이퍼스레딩 때문에 OS(윈도우, 리눅스 등)에서 코어 수가 실제 코어 수의 2배로 인식된다.
  • 예를 들어 싱글코어는 코어 2개로, 듀얼코어는 4개로 인식된다


물리적 CPU 개수 확인

[root] grep "physical id" /proc/cpuinfo | sort -u | wc -l

2

 즉 2개


CPU당 물리 코어 수 확인
[root] grep "cpu cores" /proc/cpuinfo | tail -1



반응형
반응형

http://linuxism.tistory.com/1451



반응형
반응형
package com.example.n3815.new_app.assembly;

import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.n3815.new_app.R;
import com.example.n3815.new_app.common.bean.AssemBean;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Locale;

/**
* Created by N3815 on 2016-12-28.
*/

public class AssemblyListAdapter extends BaseAdapter {
// Adapter에 추가된 데이터를 저장하기 위한 ArrayList
private ArrayList<AssemBean> assemblyItemList = new ArrayList<AssemBean>();

ArrayList<AssemBean> temp = new ArrayList<AssemBean>();

public AssemblyListAdapter(){
}

// Adapter에 사용되는 데이터의 개수를 리턴. : 필수 구현
@Override
public int getCount() {
return assemblyItemList.size() ;
}

// 지정한 위치(position)에 있는 데이터와 관계된 아이템(row)의 ID를 리턴. : 필수 구현
@Override
public long getItemId(int position) {
return position ;
}

// 지정한 위치(position)에 있는 데이터 리턴 : 필수 구현
@Override
public Object getItem(int position) {
return assemblyItemList.get(position) ;
}

// 데이터 정렬을 위한 Comparator
public static Comparator<AssemBean> cmpAsc = new Comparator<AssemBean>() {
@Override
public int compare(AssemBean o1, AssemBean o2) {
return o1.getEmpNm().compareTo(o2.getEmpNm()) ;
}
};

/**
* 어뎁터의 뷰를 구현하는 함수
* @param position -- 행의 index를 의미
* @param convertView -- 행 전체를 나타내는 뷰를 의미
* @param parent -- 어댑터를 가지고 있는 부모의 뷰를 의미
* @return
*/
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

final Context context = parent.getContext();
ViewHolder viewHolder;
View v = convertView;

// getView에서 넘어오는 convertView는 이전에 그려졌던 view를 넘기는데요.
// 한번도 inflate되지 않은 view라면 null로 전달되는 경우가 있으니 반드시 null체크는 해야합니다.
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.activity_assem_item, parent, false);

// 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 데이터 획득
viewHolder = new ViewHolder();
viewHolder.imgView = (ImageView) v.findViewById(R.id.assem_empImg);
viewHolder.empNmView = (TextView) v.findViewById(R.id.assem_empNm);
viewHolder.origNmView = (TextView) v.findViewById(R.id.assem_origNm);
viewHolder.favoriteBtn = (CheckBox) v.findViewById(R.id.favorite);
viewHolder.colorView = (TextView) v.findViewById(R.id.color);
v.setTag(viewHolder);

// 즐겨찾기 버튼 클릭시
viewHolder.favoriteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// [callback] 현재 선택된 객체 정보를 가져온다.
AssemBean selectedAssem = (AssemBean) view.getTag();
CheckBox selectedBtn = (CheckBox) view;

// 아이템을 클릭했을 경우,
if (selectedAssem.getFavorite() == false && selectedBtn.isChecked()){
Log.v("★[추가]★","======>>"+selectedAssem.getEmpNm());

// 객체의 정보를 true로 설정 - 자동으로 Array 배열의 값이 변경
selectedAssem.setFavorite(true);

for(AssemBean u : assemblyItemList){
Log.v("*[전체]*",":"+u.getEmpNm()+",("+u.getFavorite()+")");
}

// 현재 객체의 정보를 저장
view.setTag(selectedAssem);


temp.clear();
for(int q=0; q < assemblyItemList.size(); q++){
// assemblyItemList에 담긴 값이 즐겨찾기가 true일 경우
if(assemblyItemList.get(q).getFavorite()){
Log.v("*[temp에 add]*","======>>"+assemblyItemList.get(q).getEmpNm()+"("+q+")");
temp.add(assemblyItemList.get(q)); // 해당 객체 insert
assemblyItemList.remove(assemblyItemList.get(q)); // 해당 객체 delete
}else{
Log.v("*[X그외X]*","==>>"+assemblyItemList.get(q).getEmpNm()+"("+q+")");
}
}
// temp에 담긴 즐겨찾기 리스트 재정렬
Collections.sort(temp, cmpAsc);
for(AssemBean u : temp){
Log.v("#[즐겨찾기 정렬 중]#",":"+u.getEmpNm()+",("+u.getFavorite()+")");
}

// 맨 앞으로 이동
assemblyItemList.addAll(0, temp);
Log.v("===========","======================================>>>>>>"+assemblyItemList.size());
// assemblyItemList를 모두 찍어보기
for(AssemBean u : assemblyItemList){
Log.v("#[결과]#",":"+u.getEmpNm()+",("+u.getFavorite()+")");
}

notifyDataSetChanged();
Toast.makeText(context,"즐겨찾기가 등록 되었습니다.",Toast.LENGTH_LONG).show();

}else if(selectedAssem.getFavorite() == true){
Log.v("★[해제]★","======>>"+selectedAssem.getEmpNm());

selectedAssem.setFavorite(false);

// assemblyItemList를 모두 찍어보기
for(AssemBean u : assemblyItemList){
Log.v("*[전체]*",":"+u.getEmpNm()+",("+u.getFavorite()+")");
}
Log.v("*[전체 총개수]*",":("+assemblyItemList.size()+")");

temp.clear();

Collections.sort(assemblyItemList, cmpAsc);
for(int q=0; q < temp.size(); q++){
// 해당 정보가 false일 경우
if(assemblyItemList.get(q).getFavorite() && selectedAssem.getFavorite()){
Log.v("*[temp에 add]*","======>>"+assemblyItemList.get(q).getEmpNm());
temp.add(assemblyItemList.get(q));
assemblyItemList.remove(assemblyItemList.get(q));
}
}

// temp에 담긴 즐겨찾기 리스트 재정렬
Collections.sort(temp, cmpAsc);

// 맨 앞으로 이동
assemblyItemList.addAll(0, temp);

// assemblyItemList를 모두 찍어보기
for(AssemBean u : assemblyItemList){
Log.v("#[즐겨찾기 정렬 중]#",":"+u.getEmpNm()+",("+u.getFavorite()+")");
}

notifyDataSetChanged();
Toast.makeText(context,"즐겨찾기가 해제 되었습니다.",Toast.LENGTH_LONG).show();
}
}
});
}
// 캐시된 뷰가 있을 경우 저장된 뷰홀더를 사용한다
else{
viewHolder = (ViewHolder) v.getTag();
}

// Data Set(assemblyItemList)에서 position에 위치한 데이터 획득
final AssemBean listViewItem = assemblyItemList.get(position);
if(listViewItem != null){
// 현재 클릭한 아이템이 해당 객체에 들어가게된다.
viewHolder.favoriteBtn.setTag(listViewItem);

// 정당 색깔 구분
viewHolder.colorView.setBackgroundColor(Color.rgb(128, 128, 128));
if(listViewItem.getEmpNm().contains("강")) {
viewHolder.colorView.setBackgroundColor(Color.rgb(255, 0, 0));
}

// 각 위젯에 데이터 반영
Picasso.with(context).load(listViewItem.getJpgLink()).into(viewHolder.imgView);
viewHolder.empNmView.setText(listViewItem.getEmpNm());
viewHolder.origNmView.setText(listViewItem.getOrigNm());
viewHolder.favoriteBtn.setChecked(listViewItem.getFavorite());
}

return v;
}

/**
* 검색 기능
* @param charText -- 검색어
* @param assemList -- 국회의원 리스트
*/
public ArrayList<AssemBean> filter(String charText, ArrayList<AssemBean> assemList) {
charText = charText.toLowerCase(Locale.getDefault());
assemblyItemList.clear(); // 어뎁터 뷰에 연결된 배열 초기화

Log.v("***","전체 대상자 :"+assemList.size()+", (검색어 :"+charText+")***");

if (charText.length() == 0) {
// 검색된 글자가 하나도 없을 경우, 전체 리스트를 넣어주기
assemblyItemList.addAll(assemList);
} else {
// 검색된 글자가 있을 경우, 검색어와 일치하는 국회의원 정보를 담아주기
for(AssemBean u : assemList){
String name = u.getEmpNm(); // 국회의원 이름
if (name.toLowerCase().contains(charText)) {
Log.v("*[확인]*","일치하는 국회의원 :"+name);
assemblyItemList.add(u);
}
}
}

return orderByAssemList(assemblyItemList);
}

/**
* 대상 배열을 재정렬해줍니다.
* @param targetArray
*/
public ArrayList<AssemBean> orderByAssemList(ArrayList<AssemBean> targetArray){

// 전체정렬
Collections.sort(targetArray, cmpAsc);
Log.v("===========","========================================");

// 즐겨찾기 골라서 맨위로
ArrayList<AssemBean> temp = new ArrayList<AssemBean>();
for(int j = 0; j < targetArray.size(); j++){
if(targetArray.get(j).getFavorite() == true){
temp.add(targetArray.get(j));
targetArray.remove(j);
}
}
Collections.sort(temp, cmpAsc);
targetArray.addAll(0, temp);

notifyDataSetChanged();

return targetArray;
}

public class ViewHolder
{
public int number;
ImageView imgView;
TextView empNmView;
TextView origNmView;
CheckBox favoriteBtn;
TextView colorView;
}

}


반응형
반응형

#안드로이드 스크롤뷰 사용법 (Android scrollview)



// 스크롤 - 스크롤 처리에 대한 부분

listview.setOnScrollListener(new AbsListView.OnScrollListener() {

    @Override

    public void onScrollStateChanged(AbsListView absListView, int i) {

        // 상태에 대한 콜백 메소드

    }

    @Override

    public void onScroll(AbsListView absListView, int i, int i1, int i2) {

        // 스크롤 행위에 대한 콜백 메소드


        // 데이타가 정상적으로 다 보여졌을 때

        if (absListView.isShown()) {

            // 마지막 아이템까지 모두 보았을 경우, 페이지 추가 로드

            if(totalItemCount != 0 && (firstVisibleItem+visibleItemCount) == totalItemCount && lastitemVisibleFlag == false) {

                try {

                    // 다음 페이지 로드하는 비즈니스 로직 처리

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

});


반응형

+ Recent posts