0

Я пытаюсь изменить 3 текстовых просмотров в классе UserProfile(), вызывающем метод update() из класса UpdateProfile(), класс UserProfile делает что-то вроде этого :Сбой приложения для Android при попытке перезаписать текст в TextView из другого класса

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 

ПРИМЕЧАНИЕ: Я чистый проект и определил TextView в классе ProfileUser и TextEdit в UpdateProfile вне метода OnCreate, но не работает.

Спасибо.

ответ

0

Деятельность в Android - это отдельные контейнеры, которые никоим образом не позволяют напрямую касаться друг друга. Это связано с тем, что стек приложений за Android «замораживает» действия, когда они больше не находятся на переднем плане, и даже может быть заменен на жесткое хранилище, чтобы сэкономить на ОЗУ по усмотрению операционной системы.

Ваша инкапсуляция UserProfile должна просто перезагрузить свои данные после закрытия операции UpdateProfile или запросить связь надлежащим образом через startActivityForResult.

Ваша текущая реализация технически некорректна с каждой точки зрения, так как вы жестко кодируете активность UpdateProfile, которая всегда должна вызываться из операции UserProfile. Что делать, если в какой-то день вы вводите новый параметр меню, чтобы вызвать его прямо с главного экрана? Деятельность всегда раздельна и не должна делать таких предположений.

 Смежные вопросы

  • Нет связанных вопросов^_^