数据绑定时在TextView上出现空指针异常

5

我知道这个异常是什么,也知道有很多类似的问题。但是我不能将那些解决方案应用到我的问题上。当我使用findById()时,一切都正常,但是当我尝试使用数据绑定时卡住了。我对数据绑定很陌生。

public class HomePieChartMarkerViewModel extends MarkerView {
private TvContentBinding binding;

/**
 * Constructor. Sets up the MarkerView with a custom layout resource.
 *
 * @param context
 * @param layoutResource the layout resource to use for the MarkerView
 */
public HomePieChartMarkerViewModel(Context context, int layoutResource) {
    super(context, layoutResource);
}


@Override
public void refreshContent(Entry e, Highlight highlight) {
    binding.markerValue.setText("$ " + e.getY());// <<<< HERE I GOT AN ERROR
    super.refreshContent(e,highlight);
}
private MPPointF mOffset;

@Override
public MPPointF getOffset() {
    if(mOffset == null) {
        // center the marker horizontally and vertically
        mOffset = new MPPointF(-(getWidth() / 2), -getHeight());
    }

    return mOffset;
}

我在片段中调用了这个类:

IMarker marker = new HomePieChartMarkerViewModel(context,R.layout.tv_content);
    binding.myMonthlyExpenditureSingleLineChart.setMarker(marker);

我的XML TV内容

<layout>

<data>

    <variable
        name="chart_marker"
        type="com.nswd.successplan.model.HomePieChartMarkerViewModel" />
</data>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingStart="8dp"
    android:paddingEnd="8dp"
android:background="@drawable/tv_content_rounded"
    android:gravity="center">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@drawable/ic_bulet_blue"
        android:paddingEnd="8dp"/>
    <TextView
        android:id="@+id/marker_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="985"
        android:textSize="12sp"
        android:textColor="@color/background"/>
</LinearLayout>

编辑:我的错误

java.lang.NullPointerException: Attempt to read from field 'android.widget.TextView com.nswd.successplan.databinding.TvContentBinding.markerValue' on a null object reference
    at com.nswd.successplan.model.HomePieChartMarkerViewModel.refreshContent(HomePieChartMarkerViewModel.java:32)
    at com.github.mikephil.charting.charts.Chart.drawMarkers(Chart.java:741)
    at com.github.mikephil.charting.charts.BarLineChartBase.onDraw(BarLineChartBase.java:285)
    at android.view.View.draw(View.java:23191)
    at android.view.View.updateDisplayListIfDirty(View.java:22066)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.View.draw(View.java:22921)
    at android.view.ViewGroup.drawChild(ViewGroup.java:5230)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4987)
    at android.view.View.draw(View.java:23194)
    at androidx.core.widget.NestedScrollView.draw(NestedScrollView.java:1931)
    at android.view.View.updateDisplayListIfDirty(View.java:22066)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5214)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5186)
    at android.view.View.updateDisplayListIfDirty(View.java:22021)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:588)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:594)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:667)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:4263)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4047)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3320)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2200)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8999)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:996)
    at android.view.Choreographer.doCallbacks(Choreographer.java:794)
    at android.view.Choreographer.doFrame(Choreographer.java:729)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:981)
    at android.os.Handler.handleCallback(Handler.java:883)
1个回答

1
尝试使用这个。
  ((HomePieChartMarkerViewModel) context).binding.myMonthlyExpenditureSingleLineChart.setMarker(marker);
  • 当我在我的recycler view适配器类中尝试从MainActivity访问textview的内容时,遇到了相同的错误。因此,通过使用类的上下文,空指针消失了。这在我的情况下有所帮助。我在viewBinder函数内调用了它,其中还包括先前类的上下文。

我希望我回答了你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接