如何在回调中使用setText?

时间:2017-02-27 04:46:11

标签: android nullpointerexception

在下面的代码中,我可以在第一次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 个答案:

答案 0 :(得分:3)

在使用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
            }
        });
    }
}

答案 1 :(得分:1)

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

那不应该没问题......

您必须先将setContentView 放在之前findViewById。这是您的TextView为空的首要原因。

你的回调很好。