Как использовать setText из-за обратного вызова?

В моем коде ниже я могу редактировать текст из моего первого setText() позвонить, но не из-за обратного вызова.
Я получаю сообщение об ошибке NullPointerException для заголовка в обратном вызове.
Как мне это настроить, чтобы я мог редактировать текст из обратного вызова?

public class ListingActivity extends AppCompatActivity {
    final String TAG = "ListingActivity";
    TextView title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        title = (TextView)findViewById(R.id.tvTitle);

        Intent intent = getIntent();
        final String listingId = intent.getStringExtra("ObjectId");

        setContentView(R.layout.listing_activity);
        Log.e(TAG, "listingId: " + listingId);

        title.setText("listingId");//fine

        ListingManager.getListing(listingId, new ListingCB() {
            @Override
            public void done(String error, Listing listing) {
                title.setText("listingId");//null pointer error
            }
        });
    }
}

2 ответа

Решение

Ваш setContentView() метод должен быть вызван перед предоставлением ссылок с использованием findViewById() метод, поэтому ваш код будет -

    public class ListingActivity extends AppCompatActivity {
    final String TAG = "ListingActivity";
    TextView title;

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

        title = (TextView)findViewById(R.id.tvTitle);

        Intent intent = getIntent();
        final String listingId = intent.getStringExtra("ObjectId");

        Log.e(TAG, "listingId: " + listingId);

        title.setText("listingId");//fine

        ListingManager.getListing(listingId, new ListingCB() {
            @Override
            public void done(String error, Listing listing) {
                title.setText("listingId");//null pointer error
            }
        });
    }
}
title.setText("listingId");//fine

Это не должно быть хорошо...

Вы должны поставить setContentView перед любым findViewById, Это причина номер один, почему ваш TextView нулевой.

Ваш обратный звонок в порядке.

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