2017-06-19 14 views
-4

そのシーザーサイファーだけで、それをオンラインで見つけました。私のアクティビティを開始したときに私のAndroidのアクティビティがクラッシュし、他の2つのアクティビティに何も問題はありません

暗号化メソッドを実行するとアプリがクラッシュしないため、このアクティビティを開始するとアプリがクラッシュします。

マイコード:

package com.example.brend.securityreach; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 

public class EncryptActivity extends AppCompatActivity { 
    EditText thingToEncrypt = (EditText) findViewById(R.id.editText3); 
    EditText offsets = (EditText) findViewById(R.id.editText4); 
    String offsetting = thingToEncrypt.toString(); 
    int offset = Integer.valueOf(offsetting); 
    EditText encryptedText = (EditText) findViewById(R.id.editText2); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_encrypt); 
    } 

    public void encrypt(View view) { 
     char[] words = thingToEncrypt.toString().toCharArray(); 
     for (int i = 0; i < words.length; i++) { 
      char letter = words[i]; 
      letter = (char) (letter + offset); 
      if (letter > 'z') { 
       letter = (char) (letter - 26); 
      } else if (letter < 'a') { 
       letter = (char) (letter + 26); 
      } 
      words[i] = letter; 
     } 
    } 
} 

Logcatエラー:

06-19 12:49:55.587 3766-3766/com.example.brend.securityreach E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.brend.securityreach, PID: 3766 
                      java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.brend.securityreach/com.example.brend.securityreach.EncryptActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                       at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:154) 
                       at android.app.ActivityThread.main(ActivityThread.java:6077) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
                       at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:116) 
                       at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147) 
                       at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27) 
                       at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:50) 
                       at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:29) 
                       at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:29) 
                       at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:197) 
                       at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:181) 
                       at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:521) 
                       at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) 
                       at com.example.brend.securityreach.EncryptActivity.<init>(EncryptActivity.java:9) 
                       at java.lang.Class.newInstance(Native Method) 
                       at android.app.Instrumentation.newActivity(Instrumentation.java:1078) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)  
                       at android.app.ActivityThread.-wrap12(ActivityThread.java)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:154)  
                       at android.app.ActivityThread.main(ActivityThread.java:6077)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  

編集

は私がトライキャッチと変数で物事を変更すると、それを考え出しました。この質問に時間と労力を費やし、EditText変数などを宣言する方法を教えてくれたすべての人に感謝します。

+1

アプリがクラッシュしたときにここにあなたのログキャッチエラーを投稿してください。 – DaveNOTDavid

+1

EditTextを書くthingToEncrypt =(EditText)findViewById(R.id.editText3);あなたのコントロールのIDをonCreateメソッド内で見つける他のsimiler行 –

答えて

-1

AndroidManifest.xmlファイルでアクティビティを宣言していない可能性があります。親切にチェックしてください。

エラーの完全な詳細を入力してください。正しい経路で案内されます。

+0

アクティビティは暗号化メソッドなしで開始するので、それはそれだとは思わないが、エラーのログを入れた –

0

より密接にAndroidの例に従ってください:あなたは上記の行ったよう

public class EncryptActivity extends AppCompatActivity { 
    EditText thingToEncrypt = (EditText) findViewById(R.id.editText3); //no! don't do this 

findViewById(int id)と、フィールドの初期化を使用しないでください。

あなたはonCreate(Bundle savedInstanceState)にそれを置く必要があります。

EditText thingToEncrypt; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_encrypt); 
    thingToEncrypt = (EditText) findViewById(R.id.editText3); 
} 

なぜ? EditTextのようなビューは、setContentView(int layoutId)が呼び出されるまで利用できなくなります。アクティビティのライフサイクルについては、official guideをご覧ください。

+0

これを行うと、 onCreateメソッドの外部にある変数にアクセスしません。 –

+0

@BrendanはそれらをonCreateの外側に宣言しますが、それらをonCreateの内部で初期化します。私の例のように –

関連する問題