Метод интерфейса не может изменить текст TextView в Android

Я использую сервис Android. Я хочу изменить текст TextView, когда я получу ожидаемый результат от службы. Я реализовал метод интерфейса, чтобы получить обратный вызов для изменения моего textView. Абстрактный интерфейсный метод работает хорошо, но не может изменить текст Textview моей деятельности.

Я упростил пример кода здесь

public class MainActivity extends Activity implements MyInterface {

    TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.sample_text);

        Button btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.e("Asim----", "Start service"); // print this line well
                startService(new Intent(MainActivity.this, MyService.class));
            }
        });

    }

    @Override
    public void testMe() {
        Log.e("Asim----", "Hi");  // print this line well
        mTextView.setText("New Text"); // Chrashes happens here
    }

}

Класс MyService здесь

public class MyService extends Service {

    @Override
    public void onCreate() {
        //super.onCreate();
        Log.e("test1------", "onCreate"); // print this line well
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e("test2------", "onStartCommand"); // print this line well

        MyInterface mi = new MainActivity();
        mi.testMe();

        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

}

2 ответа

Вам нужно передать активность в вашем интерфейсе, а также

@Override
    public void testMe(Activity actvity) {
        Log.e("Asim----", "Hi");  // print this line well
        mTextView = (TextView) activity.findViewById(R.id.sample_text);
        mTextView.setText("New Text"); // Chrashes happens here
    }

mTextView должно быть null Вы должны найти это в этом методе

 @Override
    public void testMe() {
        Log.e("Asim----", "Hi");  // print this line well
        mTextView = (TextView) findViewById(R.id.sample_text);
        mTextView.setText("New Text"); // Chrashes happens here
    }

Попробуйте это один раз.

Другие вопросы по тегам