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>
하다 말았습니다 ㅎㅎ
다운로드 업로드 버튼만 있고 기능은 구현되어 있지 않습니다.
요 프로그램은 파일들 불러와서 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
'기술자료 > Android' 카테고리의 다른 글
안드로이드 개발어플 서비스~~~~ 테트리스 수정본~!! (1) | 2010.11.26 |
---|---|
유용한 팁 모음 사이트.. (1) | 2010.08.23 |
자작 환율정보 플그램 (3) | 2010.08.13 |
Download Android 1.5 NDK(Native Development Kit) (4) | 2009.09.11 |
윈도우에서 안드로이드 소스 다운로드 받기 (0) | 2009.09.11 |