2016-08-09 15 views
0

これは誰もが尋ねた通常の質問ではありません、私はEditTextから値を取得する方法を知っています。私は自分のアプリケーションのログイン/サインアップを作成しています。ユーザーのログインデータを別のクラス/パッケージで取得し、ユーザーが別のクラス/パッケージでデータをサインするようにします。注:このクラスはアクティビティではありませんが、を使用できるようにAppCompatActivityを拡張しています。アンドロイドの別のクラスからEditTextの値を取得する方法は?

それは

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

後に起動して、私はこの

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からレイアウトで宣言さ onClick(signup)メソッドを呼び出していますクラッシュこれはちょうど1 get-MethodでUserSignUpData.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があることについて間違っているかもしれないが、そのいくつかのエラーthatsのは、作業からコードを停止します。ありがとう

+0

public class UserSignUpData { private String signUpFullName; public UserSignUpData(String fullName) { this.signUpFullName = fullName; } public String getSignUpFullName() { return this.signUpFullName }; } 
"findViewByIdの使用を許可するAppCompatActivityを拡張しない" - 私はあなたがfindViewById'がどのように動作するかを理解し 'ないと思います。そのような他のアクティビティでもビューを見つけることはできません。 –

答えて

0

クラスがActivityでない場合。あなたは活動を拡張すべきではありません。

ロジックを別のクラスに分けようとしているとします。

この場合、getSignUpFullNameのパラメータとしてEditTextをgetSignUpFullName(EditText et)として渡して、MainActivityで正しくインスタンス化してください。 UserSignUpDataクラスで見つけようとしないでください。

+0

これはメイトのおかげで感謝しました:)私はちょうどJava Springプロジェクトを手に入れたので、まだJavaで考えています。 – Sabbib

0

あなたはクラス間でデータを渡そうとしているようです。あなたは別のクラスからビューを見つける必要はなく、おそらく "データコンテナ"クラスはアクティビティを拡張すべきではありません。

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 
    } 
} 
関連する問題