2016-07-21 11 views
1

私はアンドロイドスタジオが初めてで、チュートリアルの後にキーボードを作成しました。私は今タイムスタンプのイベントをキャプチャしようとしています。だからボタンが押されると私はタイムスタンプを取得します。私はSQLiteデータベースを使ってみましたが、それに問題がありました。私は現在、テキストファイルを作成し、データをファイルに保存しようとしています。誰かが私にこれを手伝うことができるかどうか疑問に思っていた。キーボード入力からテキストファイルにデータを内部で保存する

私はSOに関するいくつかの調査を行いましたが、外部のSDカードにデータを保存するためのドキュメントしか見つからず、コードを修正しようとしたときに動作しませんでした。

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

テキストをファイルに書き込むには、Javaの組み込みFileWriterまたはFileOutputStreamを使用できます。

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(); 

すでに前にここで回答されています:タイムスタンプを取得するにはHow do I write to a .txt file in Android?

、私は、次のようなカレンダーとのSimpleDateFormatを使用してお勧めします。

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

私はこのビューを作成ビューに入れますか? publicビューonCreateInputView(){ kv =(KeyboardView)getLayoutInflater()。inflate(R.layout.keyboard、null); keyboard =新しいキーボード(this、R.xml.qwerty); kv.setKeyboard(keyboard); 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

関連する問題