2016-07-21 2 views
1

저는 android studio를 처음 사용하고 자습서를 따라 키보드를 성공적으로 만들었습니다. 지금은 타임 스탬프 이벤트를 캡처하려고합니다. 그래서 버튼을 누르면 타임 스탬프가 생깁니다. SQLite 데이터베이스를 사용해 보았지만 문제가있었습니다. 텍스트 파일을 만들고 파일에 데이터를 저장하려고합니다. 나는 누군가가 이것으로 나를 도울 수 있을지 궁금해하고 있었다.키보드 입력으로 텍스트 파일에 내부적으로 데이터 저장

저는 SO에 대한 조사를 해봤지만 외부 sdcard에 데이터를 저장하는 데 필요한 설명서 만 찾았고 작동하지 않는 코드를 수정하려고 시도했습니다.

import android.content.Context; 
import android.inputmethodservice.InputMethodService; 
import android.inputmethodservice.Keyboard; 
import android.inputmethodservice.KeyboardView; 
import android.media.AudioManager; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.inputmethod.InputConnection; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.FileWriter; 

public class SimpleIME extends InputMethodService 
     implements KeyboardView.OnKeyboardActionListener { 

    private KeyboardView kv; 
    private Keyboard keyboard; 

    private boolean caps = false; 

    @Override 
    public View onCreateInputView() { 

     kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null); 
     keyboard = new Keyboard(this, R.xml.qwerty); 
     kv.setKeyboard(keyboard); 
     kv.setOnKeyboardActionListener(this); 
     return kv; 
    } 

    private void playClick(int keyCode){ 
     AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE); 
     switch(keyCode){ 
      case 32: 
       am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR); 
       break; 
      case Keyboard.KEYCODE_DONE: 
      case 10: 
       am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN); 
       break; 
      case Keyboard.KEYCODE_DELETE: 
       am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE); 
       break; 
      default: am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD); 
     } 
    } 

    @Override 
    public void onKey(int primaryCode, int[] keyCodes) { 
     InputConnection ic = getCurrentInputConnection(); 
     playClick(primaryCode); 
     switch(primaryCode){ 
      case Keyboard.KEYCODE_DELETE : 
       ic.deleteSurroundingText(1, 0); 
       break; 
      case Keyboard.KEYCODE_SHIFT: 
       caps = !caps; 
       keyboard.setShifted(caps); 
       kv.invalidateAllKeys(); 
       break; 
      case Keyboard.KEYCODE_DONE: 
       ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); 
       break; 
      default: 
       char code = (char)primaryCode; 
       if(Character.isLetter(code) && caps){ 
        code = Character.toUpperCase(code); 
       } 
       ic.commitText(String.valueOf(code),1); 
     } 
    } 
+0

정확하게 작동하지 않는 문서, 사용한 문서 등을 알려주십시오. 광범위한 질문입니다. 더 많은 정보를 제공하지 않으면 누구나 답변을하면 놀라지 않을 것입니다. 파일에 명시 적으로 데이터를 저장하는 것이 아니라 일부 데이터베이스 모델을 사용하는 것이 더 좋습니다. "큰"데이터베이스에 들어가기를 원하지 않으면 SugarORM을 사용해보십시오. 그것은 SQLite를위한 쉬운 ORM입니다. – sp0rk

+0

@spork 기본적으로 텍스트 파일을 만들고 단추를 누를 때 시간 소인을 삽입하는 방법을 알고 싶습니다. SQLite를 사용하여 이것을 어떻게 할 수 있습니까? – csciBeginner

답변

1

은 단순히 당신이 자바의 붙박이 FileWriter 또는 FileOutputStream에 사용할 수있는 파일에 일부 텍스트를 작성합니다. How do I write to a .txt file in Android?

타임 스탬프를 얻으려면, 내가 같은 일정 및 SimpleDateFormat에를 사용하는 것이 좋습니다 것입니다 : 전에

File root = new File(DIRECTORY_PATH); 
File mFile = new File(root, "samples.txt"); 
FileWriter writer = new FileWriter(gpxfile); 
writer.append("String to write."); 
writer.flush(); 
writer.close(); 

그것은 이미 여기에 답하고있다.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z"); 
sdf.format(Calendar.getInstance()); //returns string 
+0

이 함수를 뷰에 작성하면됩니까? public View onCreateInputView() { kv = (KeyboardView) getLayoutInflater(). inflate (R.layout.keyboard, null); keyboard = 새 키보드 (this, R.xml.qwerty); kv.setKeyboard (키보드); kv.setOnKeyboardActionListener (this); return kv; } – csciBeginner

+0

단추를 누를 때마다이 타임 스탬프를 저장하려고하므로 위에서 설명한 논리를 단추의 onClick 메서드에 구현해야합니다. OnClickListener에 익숙합니까? 또한, 편집 체크 아웃 – sp0rk

+0

위의 .java 파일을 추가했습니다. 이것이 내가 가지고있는 것입니다. – csciBeginner

0

내부 저장 장치에 쓰기에 대해서는 official docs about writing files to the internal storage을 확인하십시오. 기본적으로 앱 전용 폴더에 파일을 작성하고 있는데, 앱에만 액세스 할 수 있습니다 (일반적으로 "/ data/data /"디렉토리에 있음). 문서에서 개인 디렉터리 경로를 가져 오기 위해 "getFilesDir()"을 사용할 것이라고 말했기 때문에 FileOutputStream을 사용하여 파일을 작성하고 파일을 쓰고 자하는 형식은 사용자가 결정합니다.

+0

내 응용 프로그램에 주요 활동이 없습니다. – csciBeginner

+0

@csciBeginner 파일 디렉토리를 얻으려면 Context 객체 만 필요합니다. –

+0

예, "getFilesDir()"메서드는 Activity 또는 Service가 확장되는 Context 클래스에서 가져옵니다. – josemgu91

관련 문제