2017-06-19 53 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

請在應用程序崩潰時在這裏發佈您的logcat錯誤。 – DaveNOTDavid

+1

Write EditText thingToEncrypt =(EditText)findViewById(R.id.editText3);和其他在你的控制裏面找到你的控制id的simulator行onCreate方法 –

回答

-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中初始化它們。就像我的例子 –

相關問題