Как использовать 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
нулевой.
Ваш обратный звонок в порядке.