본문 바로가기
기술자료/Android

자작 FTP 프로그램

by 알 수 없는 사용자 2010. 8. 13.
728x90
반응형
이거 만들다가 프로젝트 바로 투입되서
하다 말았습니다 ㅎㅎ
다운로드 업로드 버튼만 있고 기능은 구현되어 있지 않습니다.
요 프로그램은 파일들 불러와서 listview에 넣는 기능과 sqlite3 사용해서 ftp 계정 관리하는것등...
조금 잼있는 프로그램중 하나입니다.
AndFtp 프로그램이라는게 있는데 많이 참조했습니다 ㅎㅎ
다시 한번 말씀드립니다만....
하다가 말았습니다. 그래도 접속하고 파일보는것까지는 되니 누가 upload, download 만들어줍쇼~
요즘 일이 바빠서 귀찮..^^;


=================================
TestFtp.java
=================================
package com.testftp;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;

public class TestFtp extends Activity implements OnClickListener{
   
    private Button m_btnConnect;
    private Button m_btnAdd;
    private Button m_btnEdit;
    private Button m_btnRemove;
    private Spinner m_spinClient;
    private TextView m_txtInfo;
   
    private int useridx;
    private String userip;
    private String userid;
    private String userpwd;
    private String username;
    private int userport;
   
    private int[] arrIdx;
    private String[] arrName;
    private String[] arrIp;
    private String[] arrId;
    private String[] arrPwd;
    private int[] arrPort;
   
    private int listid;
    private String ftpmode = null;
    private Dbadapter mDB;
   
    private Cursor mCursor;
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        m_btnConnect = (Button)findViewById(R.id.btnConnect);
        m_btnAdd = (Button)findViewById(R.id.btnAdd);
        m_btnEdit = (Button)findViewById(R.id.btnEdit);
        m_btnRemove = (Button)findViewById(R.id.btnRemove);
        m_spinClient = (Spinner)findViewById(R.id.spinClient);
        m_txtInfo = (TextView)findViewById(R.id.txtInfo);
       
        m_btnConnect.setOnClickListener(this);
        m_btnAdd.setOnClickListener(this);
        m_btnEdit.setOnClickListener(this);
        m_btnRemove.setOnClickListener(this);
       
        mDB = new Dbadapter(this);
        mDB.open();
       
        mCursor = mDB.fetchAllBooks();
        int totalcnt = mDB.CountRecord("ftplist");
        Log.d("cnt", ""+totalcnt);
       
        if(totalcnt <= 0){
            m_btnConnect.setEnabled(false);
            m_btnEdit.setEnabled(false);
            m_btnRemove.setEnabled(false);
        }
       
        arrIdx = new int[totalcnt];
        arrName = new String[totalcnt];
        arrIp = new String[totalcnt];
        arrId = new String[totalcnt];
        arrPwd = new String[totalcnt];
        arrPort = new int[totalcnt];
       
        int i = 0;
        if(mCursor.moveToFirst()){
            do{
                arrIdx[i] = mCursor.getInt(mCursor.getColumnIndexOrThrow("midx"));
                arrName[i] = mCursor.getString(mCursor.getColumnIndexOrThrow("mname"));
                arrIp[i] = mCursor.getString(mCursor.getColumnIndexOrThrow("mip"));
                arrId[i] = mCursor.getString(mCursor.getColumnIndexOrThrow("mid"));
                arrPwd[i] = mCursor.getString(mCursor.getColumnIndexOrThrow("mpwd"));
                arrPort[i] = mCursor.getInt(mCursor.getColumnIndexOrThrow("mport"));
                i++;
            }while(mCursor.moveToNext());
            //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner, arrName);
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arrName);
            m_spinClient.setAdapter(adapter);
        }
       
        m_spinClient.setOnItemSelectedListener(new OnItemSelectedListener(){

            @Override
            public void onItemSelected(AdapterView<?> arg, View v,
                    int pos, long id) {
                // TODO Auto-generated method stub
                Log.d("pos", ""+pos);
                useridx = arrIdx[pos];
                username = arrName[pos];
                userip = arrIp[pos];
                userid = arrId[pos];
                userpwd = arrPwd[pos];
                userport = arrPort[pos];
                String temp = "Name : " + username + "\n" +
                                "Ip : " + userip + "\n" +
                                "Id : " + userid + "\n" +
                                "Port : " + userport;
                m_txtInfo.setText(temp);
                Log.d("select", "" + useridx + "/" + username + "/" + userip + "/" + userpwd + "/" + userport);
                listid = useridx;
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg) {
                // TODO Auto-generated method stub
               
            }
           
        });
       
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v == m_btnConnect){
            Intent intent = new Intent(TestFtp.this, ClientList.class);
            intent.putExtra("userip", userip);
            intent.putExtra("userid", userid);
            intent.putExtra("userpwd", userpwd);
            intent.putExtra("username", username);
            intent.putExtra("userport", userport);
            startActivity(intent);
            //startActivityForResult(intent, DBREGIST_ACTIVITY);
        }else if(v == m_btnAdd){
            Intent intent = new Intent(TestFtp.this, FtpList.class);
            startActivity(intent);
        }else if(v == m_btnEdit){
            ftpmode = "update";
            Intent intent = new Intent(TestFtp.this, FtpList.class);
            intent.putExtra("listid", listid);
            intent.putExtra("ftpmode", ftpmode);
            startActivity(intent);
        }else if(v == m_btnRemove){
            ftpmode = "remove";
            Intent intent = new Intent(TestFtp.this, FtpList.class);
            intent.putExtra("listid", listid);
            intent.putExtra("ftpmode", ftpmode);
            startActivity(intent);
        }
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        mDB.close();
    }
}



==================================
ClientList.java
==================================
package com.testftp;

import java.io.IOException;
import java.net.SocketException;
import java.util.ArrayList;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.AdapterView.OnItemLongClickListener;


public class ClientList extends ListActivity implements OnClickListener{

    static final int LOCAL_SIZE = 15000;
   
    private FTPClient ftpClient;
   
    private Button m_btnSdcard;
    private Button m_btnDown;
    private Button m_btnDisconnect;
    private Button m_btnAll;
    private Button m_btnUp;
    private boolean checkall = false;
   
    private String m_sdcardDir = null;
   
    private int useridx = 0;
    private String userip;
    private String userid;
    private String userpwd;
    private String username;
    private int userport = 0;
   
    private ArrayList<String> list;
    private int list_size = 0;
   
    private String[] dirfile;
    private String[] dirfilename;
   
    private ArrayAdapter<String> fList;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.clientlist);
       
        m_btnSdcard = (Button)findViewById(R.id.btnSdcard);
        m_btnDown = (Button)findViewById(R.id.btnDown);
        m_btnDisconnect = (Button)findViewById(R.id.btnDisconnect);
        m_btnAll = (Button)findViewById(R.id.btnAll);
        m_btnUp = (Button)findViewById(R.id.btnUp);
       
        m_btnSdcard.setOnClickListener(this);
        m_btnDown.setOnClickListener(this);
        m_btnDisconnect.setOnClickListener(this);
        m_btnAll.setOnClickListener(this);
        m_btnUp.setOnClickListener(this);
       
        Intent intent = getIntent();
        username = intent.getStringExtra("username");
        userip = intent.getStringExtra("userip");
        userid = intent.getStringExtra("userid");
        userpwd = intent.getStringExtra("userpwd");
        userport = intent.getIntExtra("userport", userport);
       
        ftpClient = new FTPClient();
        ftpClient.setControlEncoding("UTF-8");
       
        try {
            ftpClient.connect(userip, userport);
            ftpClient.login(userid, userpwd);
            int reply;
            reply = ftpClient.getReplyCode();
            if(!FTPReply.isPositiveCompletion(reply)){
                ftpClient.disconnect();
            }
            ftpClient.enterLocalPassiveMode();
            ftpClient.changeWorkingDirectory("/");
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        list = new ArrayList<String>();
       
        getFilelist();
       
        ListView lv = getListView();
       
       
        fList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, list);
       
        lv.setAdapter(fList);
        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        lv.setOnItemLongClickListener(new OnItemLongClickListener(){

            @Override
            public boolean onItemLongClick(AdapterView<?> arg, View v,
                    int position, long id) {
                if(dirfile[position].equals("dir")){
                    try {
                        ftpClient.changeWorkingDirectory(dirfilename[position]);
                       
                        list.clear();
                        fList.notifyDataSetChanged();
                        //ListView.getAdapter().notifyDataSetChanged();

                        //notifyDataSetChanged();
                        getFilelist();   
                       
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    //Log.d("test", "ok : " + dirfile[position]);
                }
                return false;
            }
           
        });
       
        Log.d("size", ""+list.size());
        list_size = list.size();
       
    }

    private void getFilelist() {
        // TODO Auto-generated method stub
        try {
            FTPFile[] files = ftpClient.listFiles("*.*");
            Log.i("filelist", "ok");
            int total = files.length;
            dirfile = new String[total];
            dirfilename = new String[total];
            for(int i=0; i<files.length; i++){
                String fileName = files[i].getName();
                if(files[i].isDirectory()){
                    dirfile[i] = "dir";
                }else{
                    dirfile[i] = "file";
                }
                dirfilename[i] = fileName;
                Log.d("file", fileName);
                list.add(fileName);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v == m_btnSdcard){
            Intent intent = new Intent(ClientList.this , SdcardList.class);
            startActivityForResult(intent, 1);
        }else if(v == m_btnDown){
            int i;
            ListView lv = getListView();
            SparseBooleanArray checked = lv.getCheckedItemPositions();
            for (i = 0; i < list_size; i++) {
                if(checked.get(i)){
                    Log.i("ListViewTest", i + " : " + checked.get(i));
                }
            }
        }else if(v == m_btnDisconnect){
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finish();
        }else if(v == m_btnAll){
            int i;
            ListView lv = getListView();
            if(checkall){
                checkall = false;
                for(i=0; i<list_size; i++){
                    lv.setItemChecked(i, false);
                }
            }else{
                checkall = true;
                for(i=0; i<list_size; i++){
                    lv.setItemChecked(i, true);
                }
            }
        }else if(v == m_btnUp){
            try {
                ftpClient.changeWorkingDirectory("..");
                list.clear();
                fList.notifyDataSetChanged();
                getFilelist();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }


    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
       
    }
   
   
}



========================
FtpList.java
========================
package com.testftp;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class FtpList extends Activity implements OnClickListener{

    private EditText m_name;
    private EditText m_ip;
    private EditText m_id;
    private EditText m_pwd;
    private EditText m_port;
    private Button m_btnSave;
    private Button m_btnBack;
   
    private int idx;
    private String name = "";
    private String ip = "";
    private String id = "";
    private String pwd = "";
    private int port;
   
    private int listid = 0;
    private String ftpmode = "";
    private Dbadapter mDB;
   
    private Cursor mCursor;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ftplist);
       
        m_name = (EditText)findViewById(R.id.editName);
        m_ip = (EditText)findViewById(R.id.editIp);
        m_id = (EditText)findViewById(R.id.editId);
        m_pwd = (EditText)findViewById(R.id.editPwd);
        m_port = (EditText)findViewById(R.id.editPort);
        m_btnSave = (Button)findViewById(R.id.btnSave);
        m_btnBack = (Button)findViewById(R.id.btnBack);
       
        m_btnSave.setOnClickListener(this);
        m_btnBack.setOnClickListener(this);
       
        Intent intent = getIntent();
        listid = intent.getIntExtra("listid", listid);
        ftpmode = intent.getStringExtra("ftpmode");
       
        Log.d("FTPLIST", ""+listid+"/"+ftpmode);
       
        mDB = new Dbadapter(this);
        mDB.open();
       
        if(listid != 0){
           
            if(ftpmode.equals("update")){
                m_btnSave.setText("Edit");
               
                mCursor = mDB.fetchIdBook(listid);
                idx = mCursor.getInt(mCursor.getColumnIndexOrThrow("midx"));
                name = mCursor.getString(mCursor.getColumnIndexOrThrow("mname"));
                ip = mCursor.getString(mCursor.getColumnIndexOrThrow("mip"));
                id = mCursor.getString(mCursor.getColumnIndexOrThrow("mid"));
                pwd = mCursor.getString(mCursor.getColumnIndexOrThrow("mpwd"));
                port = mCursor.getInt(mCursor.getColumnIndexOrThrow("mport"));
               
                m_name.setText(name);
                m_ip.setText(ip);
                m_id.setText(id);
                m_pwd.setText(pwd);
                m_port.setText(""+port);
            }else if(ftpmode.equals("remove")){
                mDB.deleteBook(listid);
                Intent mintent = new Intent(FtpList.this, TestFtp.class);
                startActivity(mintent);
            }
           
        }
       
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        mDB.close();
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v == m_btnSave){
            String dName = m_name.getText().toString();
            String dIp = m_ip.getText().toString();
            String dId = m_id.getText().toString();
            String dPwd  = m_pwd.getText().toString();
            int dPort = Integer.parseInt(m_port.getText().toString());
            Log.d("ftpmode", ""+ftpmode);
            if(ftpmode != null){
                mDB.updateBook(idx, dName, dIp, dId, dPwd, dPort);
            }else{
                Log.d("test1", ""+ftpmode);
                mDB.createBook(dName, dIp, dId, dPwd, dPort);
            }
            Intent intent = new Intent(FtpList.this, TestFtp.class);
            startActivity(intent);
        }else if(v == m_btnBack){
            finish();
        }
    }

}



============================
SdcardList.java
============================
package com.testftp;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.AdapterView.OnItemLongClickListener;

public class SdcardList extends ListActivity implements OnClickListener{

    private List<String> songs = new ArrayList<String>();

    private Button m_btnClient;
    private Button m_btnUpload;
    private Button m_btnClose;
    private Button m_btnAll;
    private Button m_btnUp;
    private boolean checkall = false;
   
    private int list_size = 0;
   
    private ArrayAdapter<String> songList;
   
    static private String FILE_PATH = "/sdcard/";
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sdcardlist);
       
        m_btnClient = (Button)findViewById(R.id.btnClient);
        m_btnUpload = (Button)findViewById(R.id.btnUpload);
        m_btnClose = (Button)findViewById(R.id.btnClose);
        m_btnAll = (Button)findViewById(R.id.btnAll);
        m_btnUp = (Button)findViewById(R.id.btnUp);
       
        m_btnClient.setOnClickListener(this);
        m_btnUpload.setOnClickListener(this);
        m_btnClose.setOnClickListener(this);
        m_btnAll.setOnClickListener(this);
        m_btnUp.setOnClickListener(this);
       
       
        ListView lv = getListView();
       
        getSdFiles();
       
        File home = new File(FILE_PATH);
        if (home.listFiles(new SdFilter()).length > 0) {
            for (File file : home.listFiles(new SdFilter())) {
                songs.add(file.getName());
            }
            songList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, songs);
            lv.setAdapter(songList);
            lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
            lv.setOnItemLongClickListener(new OnItemLongClickListener(){

                @Override
                public boolean onItemLongClick(AdapterView<?> arg0, View v,
                        int position, long id) {
                    // TODO Auto-generated method stub
                   
                    return false;
                }
               
            });
        }
       
        list_size = songs.size();
       
    }

    private void getSdFiles() {
        // TODO Auto-generated method stub
       
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v == m_btnClient){
            finish();
        }else if(v == m_btnUpload){
           
        }else if(v == m_btnClose){
            finish();
        }else if(v == m_btnAll){
            int i;
            ListView lv = getListView();
            if(checkall){
                checkall = false;
                for(i=0; i<list_size; i++){
                    lv.setItemChecked(i, false);
                }
            }else{
                checkall = true;
                for(i=0; i<list_size; i++){
                    lv.setItemChecked(i, true);
                }
            }
        }else if(v == m_btnUp){
            //cd();
            /*
            try {
               
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            */
        }
    }

}

class SdFilter implements FilenameFilter {

    @Override
    public boolean accept(File dir, String filename) {
        // TODO Auto-generated method stub
        //return (filename.endsWith("*"));
        return true;
    }

}



===============================
Dbadapter.java
===============================
package com.testftp;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;

public class Dbadapter{
   
    private static final String DATABASE_NAME = "myFTP.db";  //데이터베이스 정보 (테이블 이름, 데이터베이스 이름 등)
    private static final String DATABASE_TABLE = "ftplist";  
    private static final int DATABASE_VERSION = 1;
    //필드 이름
    public static final String KEY_ROWID = "midx";
    public static final String KEY_MIP = "mip";
    public static final String KEY_MNAME = "mname";
    public static final String KEY_MID = "mid";
    public static final String KEY_MPWD = "mpwd";
    public static final String KEY_MPORT = "mport";
     
    //데이터베이스에 있는 각 열의 이름과 열 인덱스
   
    // public static final int FIND_BY_NAME = 0;
    //public static final int FIND_BY_CONTENT =1;
   
    private static final String TAG = "DbAdapter";
// //헬퍼 클래스의 인스턴스
   
     /*새로운 데이터베이스를 생성하기 위한 SQL문*/
    private static final String DATABASE_CREATE =
        "create table " + DATABASE_TABLE + " ("+
        KEY_ROWID + " integer primary key autoincrement," +
        KEY_MIP + " text not null," +
        KEY_MNAME + " text not null," +
        KEY_MID + " text not null," +
        KEY_MPWD + " text not null," +
        KEY_MPORT + " integer);";
    /*이터베이스 인스턴스를 보관하기 위한 변수*/
    private SQLiteDatabase mDb;
   
    /*이 데이터베이스를 이용하는 애플리케이션의 컨텐스트*/
    private final Context mCtx;
   
    /*데이터베이스 개방/업그레이드 도우미*/
    DatabaseHelper mDbHelper;

    public Dbadapter(Context ctx){        
        mCtx = ctx; //생성자
        mDbHelper = new DatabaseHelper(mCtx,DATABASE_NAME,null,DATABASE_VERSION);
       
    } 
    public Dbadapter open() throws SQLException{     
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }   
    public void close(){
        mDb.close();
    }    
   
    /*레코드 추가*/
    public long createBook(String mName, String mIp, String mId, String mPwd, int mPort){ // 레코드 생성       
        Log.d("test", ""+mName);
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_MNAME, mName);
        initialValues.put(KEY_MIP, mIp);
        initialValues.put(KEY_MID, mId);
        initialValues.put(KEY_MPWD, mPwd);
        initialValues.put(KEY_MPORT, mPort);
       
        return mDb.insert(DATABASE_TABLE, null, initialValues);  
    }  
    /*레코드삭제*/
    public boolean deleteBook(int rowID){       
        return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowID, null) > 0;   
    } 
    /*레코드 수정*/
    public boolean updateBook(int mRowID, String mName, String mIp, String mId, String mPwd, int mPort){// 레코드 수정        
        ContentValues args = new ContentValues();          
        args.put(KEY_MNAME, mName);
        args.put(KEY_MIP, mIp);
        args.put(KEY_MID, mId);
        args.put(KEY_MPWD, mPwd);
        args.put(KEY_MPORT, mPort);
       
        return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + mRowID, null) > 0;
    }
    /*모든 레코드 반환*/
    public Cursor fetchAllBooks(){ 
        return mDb.query(DATABASE_TABLE, new String[]{KEY_ROWID,KEY_MNAME,KEY_MIP,KEY_MID,KEY_MPWD,KEY_MPORT},
                        null, null, null, null, null); 
    }   
    /* 특정 레코드 반환*/
    public Cursor fetchIdBook(int mId) throws SQLException{
        Cursor mCursor =           
        mDb.query(true, DATABASE_TABLE, new String[]{KEY_ROWID,KEY_MNAME,KEY_MIP,KEY_MID,KEY_MPWD,KEY_MPORT}, KEY_ROWID + "='" + mId +"'" ,
                  null, null, null, null, null);        
        if(mCursor != null){         
            mCursor.moveToFirst();
        }
        return mCursor; 
    }
   
    /* 레코드 수 반환 */
    public int CountRecord(String TableName){
        int cnt ;
        String sql = "select count(*) ct from " + TableName;
        Cursor cursor;
        cursor = mDb.rawQuery(sql,null);
        cursor.moveToFirst();
        cnt = cursor.getInt(cursor.getColumnIndexOrThrow("ct"));
        return cnt;
    }
   
    public class DatabaseHelper extends SQLiteOpenHelper {   
        public DatabaseHelper(Context context , String name,CursorFactory factory, int version) {
            super(context, name, factory, version);
            // TODO Auto-generated constructor stub
        }
       
        /*
         * 디스크에 아무런 데이터베이스가 존재하지 않거나
         * 도우미 클래스가 새 데이터베이스를 새성할 필요가 있을 때 호출된다.
         */
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            db.execSQL(DATABASE_CREATE);
        }
       
        /*
         * 디스크에 있는 데이터베이스의 버전이 현재 버전으로
         * 업그레이드 되어야 할 필요가 있음을 의미하는
         * 데이터베이스 버전 불일치가 있을 경우 호출된다.
         */
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            Log.w(TAG, "Upgrading db from version" + oldVersion + " to" +
                    newVersion + ", which will destroy all old data");
            //가장 단순한 경우인 기존 테이블을 버리고 새것을 만든다.
            db.execSQL("DROP TABLE IF EXISTS DABATASE_TABLE");
            //새것을 만든다.
            onCreate(db);
        }

    }
 
       
}


===================================
main.xml
===================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="- JH FTP -"/>
    <LinearLayout
        android:id="@+id/LinearLayout01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <Spinner
            android:id="@+id/spinClient"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:prompt="@string/spin_prompt" />
        <Button
            android:text="Connect"
            android:id="@+id/btnConnect"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/LinearLayout02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical">
        <Button
            android:text="Add"
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="Edit"
            android:id="@+id/btnEdit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="Remove"
            android:id="@+id/btnRemove"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <TextView
        android:text=""
        android:id="@+id/txtInfo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>


================================
clientlist.xml
================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:text="IP"
        android:id="@+id/txtIp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:id="@+id/LinearLayout01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <Button
            android:text="Sdcard"
            android:id="@+id/btnSdcard"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="다운"
            android:id="@+id/btnDown"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="종료"
            android:id="@+id/btnDisconnect"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="√"
            android:id="@+id/btnAll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="상위"
            android:id="@+id/btnUp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/LinearLayout02"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>
</LinearLayout>



==================================
ftplist.xml
==================================
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TableLayout
        android:id="@+id/TableLayout01"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="1">
        <TableRow>
            <TextView
                android:text="FTP Server Add"
                android:id="@+id/txtFtp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_span="2"
                android:gravity="center" />
        </TableRow>
        <TableRow>
            <TextView
                android:text="Name"
                android:id="@+id/txtName"
                android:gravity="center"
                android:layout_width="100dp"
                android:layout_height="wrap_content" />
            <EditText
                android:text=""
                android:id="@+id/editName"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </TableRow>
        <TableRow>
            <TextView
                android:text="IP"
                android:id="@+id/txtIp"
                android:gravity="center"
                android:layout_width="100dp"
                android:layout_height="wrap_content" />
            <EditText
                android:text=""
                android:id="@+id/editIp"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </TableRow>
        <TableRow>
            <TextView
                android:text="ID"
                android:id="@+id/txtId"
                android:gravity="center"
                android:layout_width="100dp"
                android:layout_height="wrap_content" />
            <EditText
                android:text=""
                android:id="@+id/editId"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </TableRow>
        <TableRow>
            <TextView
                android:text="Password"
                android:id="@+id/txtPwd"
                android:gravity="center"
                android:layout_width="100dp"
                android:layout_height="wrap_content" />
            <EditText
                android:text=""
                android:id="@+id/editPwd"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:password="true" />
        </TableRow>
        <TableRow>
            <TextView
                android:text="Port"
                android:id="@+id/txtPort"
                android:gravity="center"
                android:layout_width="100dp"
                android:layout_height="wrap_content" />
            <EditText
                android:text="21"
                android:id="@+id/editPort"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </TableRow>
        <TableRow>
            <LinearLayout
                android:id="@+id/LinearLayout01"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1">
                <Button
                    android:text="Save"
                    android:id="@+id/btnSave"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                <Button
                    android:text="Back"
                    android:id="@+id/btnBack"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
            </LinearLayout>
        </TableRow>
    </TableLayout>
</ScrollView>



===========================
sdcardlist.xml
===========================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:text="IP"
        android:id="@+id/txtIp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:id="@+id/LinearLayout01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <Button
            android:text="Client"
            android:id="@+id/btnClient"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="Upload"
            android:id="@+id/btnUpload"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="Close"
            android:id="@+id/btnClose"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="√"
            android:id="@+id/btnAll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:text="상위"
            android:id="@+id/btnUp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>



=======================
spinner.xml
=======================
<?xml version="1.0" encoding="utf-8"?>
<TextView   
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
/>

========================
strings.xml
========================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, TestFtp!</string>
    <string name="app_name">Test Ftp</string>
<string name="spin_prompt">Choose a client</string>
</resources>



=============================
AndroidManifest.xml
=============================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.testftp"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:label="@string/app_name" android:name="TestFtp">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    <activity android:name="ClientList"></activity>
<activity android:name="SdcardList"></activity>
<activity android:name="FtpList"></activity>
</application>
    <uses-sdk android:minSdkVersion="6" />

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





728x90