Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更新在其他类的活动窗体中找到的文本视图_Java_Android_Android Activity - Fatal编程技术网

Java 如何更新在其他类的活动窗体中找到的文本视图

Java 如何更新在其他类的活动窗体中找到的文本视图,java,android,android-activity,Java,Android,Android Activity,主要活动类 public class MainActivity extends Activity { TextView textupdate; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textupdate = findVie

主要活动类

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

}
Mediaplayerclass

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):致命异常:主

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

05-01 13:00:48.258:E/AndroidRuntime(5599): java.lang.NullPointerException:尝试调用虚拟方法“void” 空值上的android.widget.TextView.setText(java.lang.CharSequence)“” 对象引用

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

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

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


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

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

mainActivity = (MainActivity) context;
在MainActivity中传递
getActivity()
而不是
getApplicationContext()


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

另一种方法是,将textview声明为静态,如下所示:

static TextView textupdate;
MainActivity.textupdate.setText("MpCompleted");
然后您可以直接在Mediaplayerclass中更新textview,如下所示:

static TextView textupdate;
MainActivity.textupdate.setText("MpCompleted");

感谢您的回复,我认为将小部件声明为静态是个坏主意。