2016-08-09 36 views
0

Das ist nicht die übliche Frage, die alle anderen gestellt haben, ich weiß, wie man den Wert von EditText bekommt. Ich erstelle eine Anmeldung/Anmeldung für meine App. Ich möchte, dass die Benutzeranmeldedaten von einer separaten Klasse/einem separaten Paket abgerufen werden und der Benutzer Daten mit einer separaten Klasse/Paket anmeldet. HINWEIS: Diese Klasse ist keine Aktivität, sondern erweitert AppCompatActivity, um die Verwendung von findViewById zu ermöglichen. Wie erhalten Sie Werte von EditText von einer anderen Klasse in Android?

Dies ist die UserSignUpData.class mit nur einem get-Method, wie es nach

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

Start abstürzt und ich rufe die onClick(signup) Methode, die ich von dem MainActivity.class im Layout erklärt wie diese

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 
    } 

So habe ich am Ende eine Nullpointer bekommen, die

EditText et = (EditText) findViewById(R.id.signup_name); 
zu

Punkte

Dies ist der Fehlercode:

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)  

ich auch falsch sein könnte darüber ein Nullpointer, aber die einige Fehler, das ist sein Code arbeiten zu stoppen. danke

+0

"AppCompatActivity erstreckt sich die Verwendung von findViewById zu ermöglichen" - Ich glaube nicht, dass Sie verstehen, wie 'findViewById' funktioniert. Sie können keine Ansichten über andere Aktivitäten einfach so finden. –

Antwort

0

Wenn die Klasse nicht für eine Activity ist. Sie sollten die Aktivität nicht verlängern.

Ich nehme an, Sie versuchen, die Logik in eine andere Klasse zu trennen.

In diesem Fall übergeben Sie den EditText als Parameter an die Methode getSignUpFullName als getSignUpFullName(EditText et), nachdem Sie ihn ordnungsgemäß in MainActivity instanziiert haben. Versuchen Sie nicht, es in der Klasse UserSignUpData zu finden.

+0

Das hat Mate gedankt :) Ich habe gerade ein Java Spring Projekt bekommen, also denke ich noch in Java. – Sabbib

0

Sieht aus, als ob Sie nur versuchen, Daten zwischen Klassen zu übergeben. Sie müssen keine Ansicht von einer separaten Klasse finden, und eine "Datencontainer" -Klasse sollte wahrscheinlich keine Aktivität erweitern.

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 
    } 
} 
Verwandte Themen