java - 如何从另一个类更新在 Activity 中找到的 Textview

标签 java android android-activity

MainActivity类

public class MainActivity extends Activity {
    TextView textupdate;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textupdate = findViewById(R.id.textView1);
    MediaPlayerclass mpclass = MediaPlayerclass(getApplicationContext());
    mpclass.MediaPlayer_Start(R.raw.track1);

}

public void mUpdateCountv() {

    System.out.println("textupdate "textupdate); //Returns null from MediaPlayerclass
    textupdate.setText("MpCompleted");

}

媒体播放器类

public class MediaPlayerclass {
    private Context mContext = null;
    private int mResId = 0;
    MainActivity mainactivity;
    public MediaPlayer mCurrentPlayer = null;

public MediaPlayerclass(Context context) {
    this.mContext = context;
    mainactivity = new MainActivity();
}

public void MediaPlayer_Start(int resId) {
    this.mResId = resId;
    mCurrentPlayer = MediaPlayer.create(mContext, mResId);
    mCurrentPlayer.setOnCompletionListener(onCompletionListener);
    mCurrentPlayer.start();
}

public MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
        mCurrentPlayer.release();

        //Textview Update
        mainactivity.mUpdateCountv();
    }
};

日志

05-01 13:00:48.258: E/AndroidRuntime(5599): FATAL EXCEPTION: main

05-01 13:00:48.258: E/AndroidRuntime(5599): Process: com.example.media, PID: 5599

05-01 13:00:48.258: E/AndroidRuntime(5599): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

05-01 13:00:48.258: E/AndroidRuntime(5599): at com.example.media.MainActivity.mUpdateCountv(MainActivity.java:665)

05-01 13:00:48.258: E/AndroidRuntime(5599): at com.example.media.MediaPlayerclass$1.onCompletion(MediaPlayerclass.java:41)

05-01 13:00:48.258: E/AndroidRuntime(5599): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2538)

当我从 mediaplayerclass 调用 mUpdateCountv 方法时,textupdate 始终为 null,因此我无法从 MediaPlayerclass 类更新我的 textview。我的代码有什么问题吗?提前谢谢。

最佳答案

在 MediaPlayer 类构造函数中执行以下操作:

mainActivity = (MainActivity) context;

并在您的 MainActivity 中传递 getActivity() 而不是 getApplicationContext()

您正在创建一个新的 Activity,但您需要旧的实例。您可以将其用作 Context 对象(因为 Activity 是 Context 的子类),如果需要调用 update 方法,则将其强制转换为 MainActivity。

关于java - 如何从另一个类更新在 Activity 中找到的 Textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983439/

相关文章:

java - SecurityContextLogoutHandler 的 clearAuthentication 如何不是线程安全的?

Java 文本匹配电子邮件

android - 将Unity项目导入 native 应用程序时出现问题

android - 从 Activity android选项卡调用 fragment 方法

android - Firebase API 和 Android 的 Activity 生命周期

java - 有什么方法可以知道低于特定值的颜色的 RGB 值是较浅的颜色

java - Collection 相对于 ArrayList 的优势

javascript - 使用 Phonegap 在 Android 上访问联系人

java - 在 Android 中将月份 +1 添加到日历月份中的日历问题

android - 将数据从自定义 View 发送到父 Activity