안 드 로 이 드 기반 영어 사전 구현 방법

11278 단어 Android영어.사전.
영어 사전 은 휴대 전화 에서 자주 사용 하 는 응용 이다.따라서 본 고 는 안 드 로 이 드 와 결합 하여 안 드 로 이 드 버 전의 영어 사전 을 어떻게 실현 하 는 지 토론 할 것 이다.영어 사전 을 실현 하 는 방법 은 매우 많다.본문 에 서 는 SQLite 데이터 베 이 스 를 사용 하여 영어 단어 정 보 를 저장 합 니 다.시스템 은 SQLite 데이터베이스 에 저 장 된 단어 정 보 를 통 해 지정 한 영어 와 대응 하 는 중국어 정 보 를 찾 습 니 다.물론 이런 영문 사전 을 실현 하려 면 일련의 기술 문 제 를 해결 해 야 한다.예 를 들 어 영어 단어 정 보 를 저장 하 는 데이터베이스 파일 을 프로그램(apk 파일)과 함께 발표 하 는 방법;발표 후 데이터 베 이 스 를 어떻게 엽 니까?앞의 몇 글 자 를 입력 한 후,AutoComplete TextView 구성 요소 알림 목록 에 입력 한 문자열 로 시작 하 는 모든 단 어 를 표시 하 는 방법 입 니 다.이 장 에 서 는 점차 이 문제 들 의 상세 한 답안 을 제시 할 것 이다.
전자 사전 이 해결 해 야 할 기술 문제 와 초보적인 해답 을 실현 하 다.
여기 서 전자 사전 이 해결 해 야 할 주요 기술 문 제 를 실현 하고 이런 기술 문제 에 대한 초보적인 답 이나 힌트 를 제시 할 것 이다.
상세 한 답안 과 코드 에 대하 여 독자 들 은 본문 뒤의 내용 을 참조 하 시기 바 랍 니 다.
주요 기술 문제 및 해답 은 다음 과 같다.
1.SQLite 데이터베이스(dictionary.db 파일)를 apk 파일 과 함께 발표 하 는 방법 은 무엇 입 니까?
해답:dictionary.db 파일 을 Eclipse Android 프로젝트 의 res\raw 디 렉 터 리 에 복사 할 수 있 습 니 다.그림 1 참조.res\raw 디 렉 터 리 에 있 는 모든 파일 은 압축 되 지 않 습 니 다.이 디 렉 터 리 에 있 는 파일 을 직접 추출 할 수 있 습 니 다.
                     
그림 1  dictionary.db 파일 을 res\raw 디 렉 터 리 에 복사 합 니 다.
2.res\raw 디 렉 터 리 의 데이터베이스 파일 을 어떻게 엽 니까?
해답:Android 에 서 는 res\raw 디 렉 터 리 의 데이터베이스 파일 을 직접 열 수 없 으 며,프로그램 이 처음 시 작 될 때 이 파일 을 휴대 전화 메모리 나 SD 카드 의 한 디 렉 터 리 에 복사 한 다음 데이터베이스 파일 을 열 어야 합 니 다.복사 하 는 기본 방법 은 getResources().openRawResource 방법 으로 res\raw 디 렉 터 리 에 있 는 자원 의 InputStream 대상 을 얻 은 다음 이 InputStream 대상 의 데 이 터 를 다른 디 렉 터 리 에 해당 하 는 파일 에 기록 하 는 것 입 니 다.Android SDK 에 서 는 임의의 디 렉 터 리 에 있 는 SQLite 데이터베이스 파일 을 SQLiteDatabase.openOrCreateDatabase 방법 으로 열 수 있 습 니 다.
3.AutoComplete TextView 구성 요소 에 두 개 이상 의 알파벳 을 입력 할 때 입력 한 문자열 로 시작 하 는 모든 단어 목록 을 표시 합 니까?
해답:AutoComplete TextView 에서 사용 하 는 Adapter 는 사용자 정의 Adapter 클래스 입 니 다.클래스 의 구 조 는 다음 과 같 습 니 다.

public class DictionaryAdapter extends CursorAdapter
{
  
}
주의해 야 할 것 은 데이터베이스 에 있 는 모든 단 어 를 찾 아 낸 다음 Adapter 대상 을 만 들 고 setAdapter 방법 으로 AutoComplete TextView 구성 요소 의 Adapter 대상 을 설정 할 수 없습니다.AutoComplete TextView 구성 요 소 는 문자열 로 시작 하 는 단 어 를 선택 하지 않 습 니 다.이 작업 들 은 개발 자가 인 코딩 을 통 해 실현 해 야 한다.
기본 적 인 사 고 는 AutoComplete TextView 류 의 after TextChanged 이벤트 에서 AutoComplete TextView 구성 요소 의 문자 입력 상황 을 감시 하고 한 문 자 를 입력 할 때마다 Adapter 대상 을 생 성 한 다음 새로 생 성 된 Adapter 대상 을 AutoComplete TextView 와 연결 하 는 것 입 니 다.입력 문자열 로 시작 하 는 단어 목록 의 효 과 를 보 여 줍 니 다.그림 2 참조.

그림 2  입력 문자열 로 시작 하 는 단어 목록 보이 기
영어 단 어 를 저장 하 는 데이터베이스 파일 을 복사 하고 엽 니 다.
본 논문 에서 실 현 된 영문 사전 에서 openDatabase 방법 으로 데이터베이스 파일 을 엽 니 다(이 파일 은 SD 카드 의 dictionary 디 렉 터 리 에 있 기 때문에 본 논문 에서 실 현 된 영문 사전 을 실행 하려 면 핸드폰 이나 시 뮬 레이 터 에 SD 카드 를 설치 해 야 합 니 다).이 파일 이 존재 하지 않 으 면 시스템 은 자동 으로/sdcard/dictionary 디 렉 터 리 를 만 들 고 res\raw 디 렉 터 리 의 dictionary.db 파일 을/sdcard/dictionary 디 렉 터 리 에 복사 합 니 다.openDatabase 방법의 실현 코드 는 다음 과 같다.

 private SQLiteDatabase openDatabase()
 {
  try
  {
   //   dictionary.db       
   String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
   File dir = new File(DATABASE_PATH);
   //   /sdcard/dictionary     ,      
   if (!dir.exists())
    dir.mkdir();
   //    /sdcard/dictionary      
   // dictionary.db  ,  res\raw          
   // SD    (/sdcard/dictionary)
   if (!(new File(databaseFilename)).exists())
   {
    //     dictionary.db   InputStream  
    InputStream is = getResources().openRawResource(R.raw.dictionary);
    FileOutputStream fos = new FileOutputStream(databaseFilename);
    byte[] buffer = new byte[8192];
    int count = 0;
    //     dictionary.db  
    while ((count = is.read(buffer)) > 0)
    {
     fos.write(buffer, 0, count);
    }

    fos.close();
    is.close();
   }
   //   /sdcard/dictionary    dictionary.db  
   SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
     databaseFilename, null);
   return database;
  }
  catch (Exception e)
  {
  }
  return null;
 }

openDatabase 방법 에서 몇 개의 상수 가 사용 되 었 습 니 다.이 상수 들 은 프로그램의 주 클래스(Main)에서 정 의 된 것 입 니 다.코드 는 다음 과 같 습 니 다.

public class Main extends Activity implements OnClickListener, TextWatcher
{
 private final String DATABASE_PATH = android.os.Environment
   .getExternalStorageDirectory().getAbsolutePath()
   + "/dictionary";
 private final String DATABASE_FILENAME = "dictionary.db";
}
단어 검색
영어 사전 의 핵심 은 영어 단어의 중국어 뜻 을 찾 는 것 이다.중국어 의 뜻 을 찾기 전에 먼저 openDatabase 방법 을 사용 하여 Main 류 의 onCreate 방법 에서 SQLite 데이터 베 이 스 를 열 어야 합 니 다.코드 는 다음 과 같 습 니 다.
database = openDatabase();
그 중에서 database 는 Main 클래스 에서 정 의 된 SQLiteDatabase 형식 변수 입 니 다.
그리고 검색 단 추 를 누 른 이벤트 에 다음 과 같은 코드 를 추가 하여 영어 단 어 를 찾 고 중국어 의 미 를 표시 합 니 다.

public void onClick(View view)
 {
  String sql = "select chinese from t_words where english=?"; 
  Cursor cursor = database.rawQuery(sql, new String[]
  { actvWord.getText().toString() });
  String result = "      .";
  //       ,       
  if (cursor.getCount() > 0)
  {
   //     moveToFirst           1      
   cursor.moveToFirst();
   result = cursor.getString(cursor.getColumnIndex("chinese"));
  }
  //          
  new AlertDialog.Builder(this).setTitle("    ").setMessage(result)
    .setPositiveButton("  ", null).show();

 }

여기까지 말 하면 dictionary.db 의 t 를 알 아야 합 니 다.words 표 의 결과,이 표 는 두 필드 만 있 습 니 다:english 와 chinese.단어의 영어 와 중국어 설명 을 각각 나타 낸다.단어의 중국어 설명 을 얻 으 려 면 chinese 필드 만 찾 으 면 됩 니 다.onClick 방법의 코드 와 같 습 니 다.단 어 를 조회 하 는 효 과 는 그림 3 과 같다.

그림 3 영어 단어 조회
입력 문자열 로 시작 하 는 단어 목록 을 표시 하면
      지금까지 우리 의 영어 사전 은 정상적으로 작 동 할 수 있 었 지만 독자 들 이 편리 하 게 사용 할 수 있 도록 이 절 에 단어 입력 의 자동 알림 기능 을 추가 할 것 이다.즉,독자 가 AutoComplete TextView 구성 요소 에 단어의 앞 글 자 를 입력 하면 이 구성 요 소 는 데이터베이스 에 있 는 모든 문자열 로 시작 하 는 단 어 를 자동 으로 보 여 주 는 것 이다.효 과 는 그림 2 와 같다.이러한 기능 을 가지 고 있 으 면 사용 자 는 단어의 앞 글자 만 알 때 도 해당 하 는 단 어 를 찾 을 수 있다.
       AutoComplete TextView 구성 요 소 는 사용자 정의 Adapter 류 를 사 용 했 기 때문에 사용자 정의 Adapter 류 의 전체 코드 를 먼저 보 여 줍 니 다.

 public class DictionaryAdapter extends CursorAdapter
 {
  private LayoutInflater layoutInflater;
  @Override
  public CharSequence convertToString(Cursor cursor)
  {
   return cursor == null ? "" : cursor.getString(cursor
     .getColumnIndex("_id"));
  }
  //    _id  (   english  )    TextView     
  // view            TextView  
  private void setView(View view, Cursor cursor)
  {
   TextView tvWordItem = (TextView) view;
 tvWordItem.setText(cursor.getString(cursor.getColumnIndex("_id")));
  }

  @Override
  public void bindView(View view, Context context, Cursor cursor)
  {
   setView(view, cursor);
  }

  @Override
  public View newView(Context context, Cursor cursor, ViewGroup parent)
  {
   View view = layoutInflater.inflate(R.layout.word_list_item, null);
   setView(view, cursor);
   return view;
  }
  public DictionaryAdapter(Context context, Cursor c, boolean autoRequery)
  {
   super(context, c, autoRequery);
   //         LayoutInflater  
 
   layoutInflater = (LayoutInflater) context
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  }
 }

Dictionary Adapter 클래스 를 작성 할 때 다음 과 같은 3 가 지 를 주의해 야 합 니 다.
1.Cursor 대상 을 AutoComplete TextView 구성 요소 와 연결 하기 위해 Dictionary Adapter 류 는 Cursor Adapter 류 에서 계승 해 야 합 니 다.
2.CursorAdapter 클래스 의 convertToString 방법 은 Cursor 대상 의 주 소 를 직접 되 돌려 주기 때문에 Dictionary Adapter 클래스 에서 convertToString 방법 을 덮어 현재 선택 한 단 어 를 되 돌려 주어 야 합 니 다.CursorAdapter 클래스 의 convertToString 방법의 소스 코드 입 니 다.

 public CharSequence convertToString(Cursor cursor)
 {
   //   cursor  null,  Cursor     (cursor.toString())
  return cursor == null ? "" : cursor.toString();
 }
 
덮어 쓴 convertToString 방법의 원본 코드 는 다음 과 같 습 니 다.

public CharSequence convertToString(Cursor cursor)
{
 return cursor == null ? "" : cursor.getString(cursor
     .getColumnIndex("_id"));
}

AutoComplete TextView 구성 요소 의 단어 목록 에 있 는 단 어 를 선택 하면 시스템 은 convertToString 방법의 반환 값 으로 AutoComplete TextView 구성 요소 의 텍스트 를 설정 합 니 다.따라서 Cursor 의 getString 을 사용 하여 필드 값 을 받 아야 합 니 다.
3.Cursor 대상 을 Adapter 와 연결 할 때''라 는 이름 이 있어 야 합 니 다.id 필드 입 니 다.따라서 이 예 에서 english 필드 이름 을""로 표시 합 니 다.id 필드.
AutoComplete TextView 구성 요소 의 텍스트 입력 상황 을 감시 하기 위해 서 는 android.text.TextWatcher 인터페이스 가 필요 합 니 다.이 인터페이스 에서 after TextChanged 방법 만 실현 하면 됩 니 다.코드 는 다음 과 같 습 니 다.

public void afterTextChanged(Editable s)
{
  //    english       _id 
  Cursor cursor = database.rawQuery(
    "select english as _id from t_words where english like ?",
    new String[]{ s.toString() + "%" });
  DictionaryAdapter dictionaryAdapter = new DictionaryAdapter(this,cursor, true);
  // actvWord  Main     AutoCompleteTextView     
  actvWord.setAdapter(dictionaryAdapter);
}
위의 코드 에서 볼 수 있 듯 이 SQL 문 구 를 조회 하 는 english 필드 이름 의 별명 은''입 니 다.id”。
4.Dictionary Adapter 클래스 에 서 는 bindView 와 new View 방법 으로 모든 목록 항목 을 설정 해 야 합 니 다.bindView 방법 은 이미 존재 하 는 목록 항목 을 설정 하 는 것 을 책임 집 니 다.즉,이 목록 항목 은 해당 하 는 구성 요소 대상 을 생 성 했 습 니 다.new View 방법 은 새로운 목록 항목 을 설정 하 는 것 을 책임 집 니 다.이 방법 에서 현재 목록 항목 을 표시 하기 위해 View 대상 을 만들어 야 합 니 다.이 예 에서 word 사용list_item.xml 레이아웃 파일 은 모든 목록 항목 을 표시 합 니 다.코드 는 다음 과 같 습 니 다. 

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/tvWordItem"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:textAppearance="?android:attr/textAppearanceLarge"
 android:gravity="center_vertical"
 android:paddingLeft="6dip"
 android:textColor="#000" 
 android:minHeight="?android:attr/listPreferredItemHeight"
/>
본 고 는 안 드 로 이 드 를 바탕 으로 한 영어 사전 을 실현 하 는 방법 을 소개 했다.영어 사전 을 실현 하려 면 주로 세 가지 문 제 를 해결 해 야 한다.영어 단 어 를 저장 하 는 SQLite 데이터베이스 파일 을 apk 파일 과 함께 발표 하 는 방법;SD 카드 의 데이터베이스 파일 을 어떻게 엽 니까?입력 문자열 로 시작 하 는 영어 단어 목록 을 AutoComplete TextView 구성 요소 에 표시 하 는 방법 입 니 다.마지막 으로 사용자 정의 Dictionary Adapter 클래스 를 만 들 때 반드시 contertToString 방법 을 덮어 쓰 고 사용자 가 목록 항목 을 선택 할 때 Cursor 대상 주소 가 아 닌 AutoComplete TextView 구성 요소 에 선택 한 단 어 를 표시 해 야 합 니 다.
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기