2016-05-05 8 views
0

私は自分自身でAndroid開発を教えるためにハングマンのゲームに取り組んでいます。私は既にJava用にPC用にしてきましたが、うまく動作しています。私はAndroid Studio 2.1を使用しています。モニターは私に多くのエラーを投げつけ続けています。私が見ているものを確認することはできません。アンドロイドのアセットファイルからの読み取り

私が苦労している部分は、アセットのファイル "WordsDoc"から読み込むことです。私が持っているコードは次のとおりです。

編集2

アプリのためのすべてのコード、これまで

public class MainActivity extends AppCompatActivity { 

    static String strWord = ""; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final TextView theWord = (TextView) 
       findViewById(R.id.textViewWord); 
     final EditText editTextGuess = (EditText) 
       findViewById(R.id.editTextGuess); 
     final Button buttonGuess = (Button) 
       findViewById(R.id.btnGuess); 
     final TextView theIncorrectGuesses = (TextView) 
       findViewById(R.id.textViewIncorrectLetters); 
     setContentView(R.layout.activity_main); 
     alertMessage(this,"ERROR"); 
     strWord = getTheWord(); 
     theWord.setText(strWord); 
     newGame(); 
     buttonGuess.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view){ 

       theIncorrectGuesses.setText("ABCDEF"); 
      } 
     }); 
    } 
    public String getTheWord() { 

     List<String> lines = new ArrayList<String>(); 
     BufferedReader reader = null; 
     try { 
      reader = new BufferedReader(
        new InputStreamReader(getAssets().open("WordsDoc.txt"))); 

      // do reading, usually loop until end of file reading 
      String mLine; 
      while ((mLine = reader.readLine()) != null) { 
       //process line 
       lines.add(mLine); 
      } 
      int intLen = 0; 
      String[] strWords = lines.toArray(new String[lines.size()]); 
      for (String strTemp : strWords){ 
       intLen ++; 
      } 
      int intRand = (int)(Math.random()* intLen); 
      return strWords[intRand]; 

     } catch (IOException e) { 
      //log the exception 
     } finally { 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (IOException e) { 
        //log the exception 
       } 
      } 
     } 
     return null; 
    } 
    public void newGame() { 

    } 
    public static void alertMessage(Activity a, String errMsg){ 

     final AlertDialog.Builder builder = new AlertDialog.Builder(a); 
     builder.setTitle("Alert Dialog"); 
     builder.setMessage(errMsg); 
     builder.setIcon(android.R.drawable.ic_dialog_alert); 
     builder.setNeutralButton("OK", null); 
     builder.create().show(); 
    } 
} 

編集の3

例(実際にはあまりありません!)ファイルWordsDoc.txtは次のとおりです。

aardvark 
Aarhus 
Aaron 
... continues 45000 more times 

編集

エラー:

E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.xxxx.hangman, PID: 4532 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxx.hangman/com.xxxx.hangman.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
    at com.xxxx.hangman.MainActivity.onCreate(MainActivity.java:34) 
    at android.app.Activity.performCreate(Activity.java:6237) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    05-05 08:44:32.994 4532-4532/com.xxxx.hangman I/Process: Sending signal. PID: 4532 SIG: 9 
+2

あなたはどんなエラーが表示されていますか? –

+0

@NongthonbamTonthoiが編集で追加されました。 – Geoff

+0

ファイル名の拡張子はありますか? –

答えて

1

拡張子を持つファイルを開いてみてください:

BufferedReader reader = null; 
    try { 
     reader = new BufferedReader(
       new InputStreamReader(getAssets().open("WordsDoc.txt"))) 
     ... 

編集:私のコードのためのソリューション:

あなたがしようとしていますsetContentView(R.layout.activity_main)の前にビューにアクセスしてくださいwはnullです。

入れ、この行:この後すぐに

setContentView(R.layout.activity_main); 

:あなたのMainActivityで

super.onCreate(savedInstanceState); 

。このように:

+0

私はそれを.txtファイルに変更し、コードでも、まだ運が変更されました。私はこれまでのコードをすべて表示するために元の投稿を編集しました。 – Geoff

+0

実際にはどのような種類のファイルですか?私は例を挙げていただけです。このような変更はうまくいきません –

+0

ファイルは以前は拡張子がありませんでしたが、これを唯一の論理的拡張子として.txt拡張子に変更しました。ファイルの例を示す編集を含みます。 – Geoff

関連する問題