0

J'essaie de changer 3 textviews dans une classe appelée UserProfile() appelant la méthode update() de la classe UpdateProfile(), la classe UserProfile fait quelque chose comme ça :Plantage de l'application Android lorsque vous essayez d'écraser du texte dans un TextView d'une autre classe

package com.safm; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 

public class UserProfile extends Activity { 
TextView username, usersurname, useremail; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_profile); 

    username = (TextView) findViewById(R.id.username); 
    usersurname = (TextView) findViewById(R.id.usersurname); 
    useremail = (TextView) findViewById(R.id.useremail); 
} 

public void updateButton(View view){ 
    Intent i = new Intent(this, UpdateProfile.class); 
    startActivity(i); 
} 

public void update(String nname, String nusername, String nemail){ 
    System.out.println("2"); 
    System.out.println(nname); 
    username.setText(nname); 
    usersurname.setText(nusername); 
    useremail.setText(nemail); 
    System.out.println("3"); 
} 

} 

la méthode updateButton appeler la classe UpdateProfile:

package com.safm; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

public class UpdateProfile extends Activity { 
EditText newusernametxt, newsurnametxt, newemailtxt; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_actualizarperfil); 

    newusernametxt = (EditText) findViewById(R.id.newusernametxt); 
    newsurnametxt = (EditText) findViewById(R.id.newsurnametxt); 
    newemailtxt = (EditText) findViewById(R.id.newemailtxt); 
} 

public void updateInfo(View view){  
    String nname = newusernametxt .getText().toString(); 
    String nsurname = newsurnametxt .getText().toString(); 
    String nemail = newemailtxt .getText().toString(); 

    if(nname.compareTo("") != 0 && nsurname.compareTo("") != 0 && nemail.compareTo("") != 0){   
     UserProfile profile = new UserProfile(); 
     System.out.println("1"); 

     profile.update(nname, nsurname, nemail); 
     System.out.println("4"); 

     Toast.makeText(this, "Success, the profile has been updated", Toast.LENGTH_SHORT).show(); 
    }else{ 
     Toast.makeText(this, "You can't empty fields", Toast.LENGTH_SHORT).show(); 
    } 

} 

Ceci est mon fichier logcat, comme vous pouvez le voir, les 2 premiers drapeaux sont imprimés correctement, l'erreur est lorsque je tente de mettre un autre texte sur TextView, mais la valeur des chaînes (nname, nsurname et nemail) ne sont pas vides car elle est également imprimée dans la console HELP!

05-14 21:43:31.140: I/System.out(878): 1 
    05-14 21:43:31.140: I/System.out(878): 2 
    05-14 21:43:31.150: I/System.out(878): TextEditValue 

    05-14 21:43:31.150: D/AndroidRuntime(878): Shutting down VM 
    05-14 21:43:31.150: W/dalvikvm(878): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
    05-14 21:43:31.310: E/AndroidRuntime(878): FATAL EXCEPTION: main 
    05-14 21:43:31.310: E/AndroidRuntime(878): java.lang.IllegalStateException: Could not execute method of the activity 
    05-14 21:43:31.310: E/AndroidRuntime(878): at android.view.View$1.onClick(View.java:3599) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at android.view.View.performClick(View.java:4204) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at android.view.View$PerformClick.run(View.java:17355) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at android.os.Handler.handleCallback(Handler.java:725) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at android.os.Handler.dispatchMessage(Handler.java:92) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at android.os.Looper.loop(Looper.java:137) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at android.app.ActivityThread.main(ActivityThread.java:5041) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at java.lang.reflect.Method.invokeNative(Native Method) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at java.lang.reflect.Method.invoke(Method.java:511) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at dalvik.system.NativeStart.main(Native Method) 
    05-14 21:43:31.310: E/AndroidRuntime(878): Caused by: java.lang.reflect.InvocationTargetException 
    05-14 21:43:31.310: E/AndroidRuntime(878): at java.lang.reflect.Method.invokeNative(Native Method) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at java.lang.reflect.Method.invoke(Method.java:511) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at android.view.View$1.onClick(View.java:3594) 
    05-14 21:43:31.310: E/AndroidRuntime(878): ... 11 more 
    05-14 21:43:31.310: E/AndroidRuntime(878): Caused by: java.lang.NullPointerException 
    05-14 21:43:31.310: E/AndroidRuntime(878): at com.safm.UserProfile.update(UserProfile.java:31) 
    05-14 21:43:31.310: E/AndroidRuntime(878): at com.safm.UserProfile.updateInfo(UpdateProfile.java:33) 
    05-14 21:43:31.310: E/AndroidRuntime(878): ... 14 more 

NOTE: J'ai propre projet et défini le TextView en classe ProfilForumsVidéosInterviewsPodcastNewsletterAnciens et TextEdit dans UpdateProfile en dehors de la méthode onCreate mais ne fonctionne pas.

Merci.

Répondre

0

Les activités dans Android sont des conteneurs séparés, qui ne sont en aucun cas autorisés à se toucher directement. En effet, la pile d'applications derrière Android "gèle" les activités quand elles ne sont plus au premier plan, et pourrait même être permutée sur le stockage dur pour économiser de la RAM à la discrétion du système d'exploitation.

Votre encapsulation UserProfile doit simplement recharger ses données après la fermeture de l'activité UpdateProfile, ou demander la communication correcte via startActivityForResult.

Votre implémentation actuelle est techniquement incorrecte dans chaque perspective, puisque vous codez en dur l'activité UpdateProfile pour qu'elle soit toujours appelée depuis une activité UserProfile. Et si un jour vous introduisiez une nouvelle option de menu pour l'appeler directement à partir de l'écran d'accueil? Les activités sont toujours séparées et ne devraient pas faire de telles suppositions.

Questions connexes