【问题标题】:How do I use setText from within a callback?如何在回调中使用 setText?
【发布时间】:2017-02-27 04:46:10
【问题描述】:

在下面的代码中,我可以编辑第一个 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
            }
        });
    }
}

【问题讨论】:

  • 发布错误跟踪。
  • ListingManager 是 ? 的参考
  • 以下答案是正确的,但您还应该确保回调在主线程上运行。

标签: android nullpointerexception


【解决方案1】:

您的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
            }
        });
    }
}

【讨论】:

    【解决方案2】:
    title.setText("listingId");//fine
    

    那应该没问题……

    您必须将setContentView 放在任何findViewById 之前。这是您的TextView 为空的第一大原因。

    您的回拨没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2018-05-10
      • 1970-01-01
      相关资源
      最近更新 更多