2016-08-09 92 views
0

這不是別人問的常見問題,我知道如何從EditText得到價值。我正在爲我的應用程序創建一個登錄/註冊,我希望通過一個單獨的類/包檢索用戶登錄數據,並且用戶使用單獨的類/包註冊數據。注意:此類不是一項活動,但確實延伸AppCompatActivity以允許使用findViewById如何從android中的另一個類的EditText中獲取值?

這是隻有一個get-Method的UserSignUpData.class因爲它崩潰後

public class UserSignUpData extends AppCompatActivity { 

    public String getSignUpFullName() { 
     EditText et = (EditText) findViewById(R.id.signup_name); //NullPointerException 
     String fn = et.getText().toString(); 
     return fn; 
    }//end getSignUpFullName() 

開始和我打電話的onClick(signup)的方法,我從這樣的

public class MainActivity extends AppCompatActivity { 
    public void signUp(View v){ 
     UserSignUpData signUpData = new UserSignUpData(); 
     String name = signUpData.getSignUpFullName(); 
     Toast.makeText(MainActivity.this, ud.getSignUpFullName(), Toast.LENGTH_SHORT).show(); 
     //just to test if it works 
    } 
的MainActivity.class佈局聲明

所以我最終得到它指向

EditText et = (EditText) findViewById(R.id.signup_name); 
一個NullPointerException

這是錯誤代碼:

FATAL EXCEPTION: main java.lang.IllegalStateException: Could not execute method for android:onClick 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
    at android.view.View.performClick(View.java:4240) 
    at android.view.View$PerformClick.run(View.java:17721) 
    at android.os.Handler.handleCallback(Handler.java:730) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5103) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
    at android.view.View.performClick(View.java:4240)  
    at android.view.View$PerformClick.run(View.java:17721)  
    at android.os.Handler.handleCallback(Handler.java:730)  
    at android.os.Handler.dispatchMessage(Handler.java:92)  
    at android.os.Looper.loop(Looper.java:137)  
    at android.app.ActivityThread.main(ActivityThread.java:5103)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:525)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  
    at dalvik.system.NativeStart.main(Native Method)  
    Caused by: java.lang.NullPointerException 
    at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:72) 
    at android.support.v7.app.AppCompatDelegateImplV7.<init>(AppCompatDelegateImplV7.java:146) 
    at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28) 
    at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:41) 
    at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:193) 
    at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:173) 
    at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:511) 
    at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:183) 
    at com.example.pc_charlie.loginapp.UserSignUpData.getSignUpFullName(UserSignUpData.java:12) 
    at com.example.pc_charlie.loginapp.MainActivity.signUp(MainActivity.java:52) 
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:525)  
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
    at android.view.View.performClick(View.java:4240)  
    at android.view.View$PerformClick.run(View.java:17721)  
    at android.os.Handler.handleCallback(Handler.java:730)  
    at android.os.Handler.dispatchMessage(Handler.java:92)  
    at android.os.Looper.loop(Looper.java:137)  
    at android.app.ActivityThread.main(ActivityThread.java:5103)  
    at java.lang.reflect.Method.invokeNative(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:525)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  
    at dalvik.system.NativeStart.main(Native Method)  

我也可能是誤以爲這是一個NullPointerException異常,但它的一些錯誤這就是從停止工作的代碼。謝謝

+0

「是延伸AppCompatActivity允許使用findViewById的」 - 我不認爲你明白findViewById'如何'工作。就像那樣,你無法找到其他活動的觀點。 –

回答

0

如果該類不是爲Activity。你不應該擴大活動。

我假設你試圖將邏輯分離到另一個類中。

在這種情況下,只需將EditText作爲參數傳遞給方法getSignUpFullNamegetSignUpFullName(EditText et),然後在MainActivity中正確實例化它。不要試圖在UserSignUpData課程中找到它。

+0

工作夥伴謝謝:)我剛剛得到了一個Java Spring項目,所以即時通訊仍然在思考Java。 – Sabbib

0

看起來你只是試圖在類之間傳遞數據。您不需要從單獨的類中查找視圖,並且「數據容器」類可能不應該擴展任何活動。

public class UserSignUpData { 

    private String signUpFullName; 

    public UserSignUpData(String fullName) { 
     this.signUpFullName = fullName; 
    } 

    public String getSignUpFullName() { return this.signUpFullName }; 
} 
public class MainActivity extends AppCompatActivity { 
    public void signUp(View v){ 
     EditText et = (EditText) findViewById(R.id.signup_name); 
     String name = et.getText().toString(); 

     UserSignUpData ud = new UserSignUpData(name); 
     Toast.makeText(MainActivity.this, ud.getSignUpFullName(), Toast.LENGTH_SHORT).show(); 
     //just to test if it works 
    } 
} 
相關問題