안 드 로 이 드 기반 영어 사전 구현 방법
전자 사전 이 해결 해 야 할 기술 문제 와 초보적인 해답 을 실현 하 다.
여기 서 전자 사전 이 해결 해 야 할 주요 기술 문 제 를 실현 하고 이런 기술 문제 에 대한 초보적인 답 이나 힌트 를 제시 할 것 이다.
상세 한 답안 과 코드 에 대하 여 독자 들 은 본문 뒤의 내용 을 참조 하 시기 바 랍 니 다.
주요 기술 문제 및 해답 은 다음 과 같다.
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 구성 요소 에 선택 한 단 어 를 표시 해 야 합 니 다.이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.