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/