0

我試圖改變3個textviews在一個叫做用戶配置()調用從類UpdateProfile(方法更新()),該類用戶配置類一個TextView覆蓋文本做這樣的事情:Android應用程序崩潰時,試圖從其他類

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"); 
} 

} 

的updateButton方法調用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(); 
    } 

} 

這是我logcat的文件,你可以看到,第2個標誌打印正確,錯誤的是,當我嘗試設置TextView上的另一個文本,但字符串的值(nname,nsurname和nemail)不是空的原因也被打印在控制檯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 

注:我乾淨的項目,並定義的ProfileUser類的TextView和onCreate方法之外的文本編輯在UpdateProfile但不起作用。

謝謝。

回答

0

Android中的活動是獨立的容器,不允許直接觸摸彼此。這是因爲當Android不再處於前臺時,Android的應用程序堆棧會「凍結」這些活動,甚至可以根據操作系統的判斷將其交換到硬存儲以保存在RAM中。

您的UserProfile封裝應該在UpdateProfile活動關閉後重新加載其數據,或者通過startActivityForResult請求正確的通信方式。

從各個角度來看,您當前的實施在技術上是不正確的,因爲您正在對UpdateProfile活動進行硬編碼以始終從UserProfile活動調用。如果有一天你引入一個新的菜單選項,直接從主屏幕調用它,會怎麼樣?活動總是獨立的,不應該做出這樣的假設。