首页 > 解决方案 > 如何修复 android 中的“textview data”错误

问题描述

我想在从 Timer Activity 获取的 Dialogfragment 中添加随机数以放在 textview 上;

我尝试改变很多次

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    txt_v=(TextView)findViewById(R.id.hello);
    txtv_2=(TextView)findViewById(R.id.textV_2);
    btn_str=(Button)findViewById(R.id.btn_give_str);

    dia=new DiagFragment();

    nBtb=(Button)findViewById(R.id.bt);
    nBtb.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            dia.show(MainActivity.this.getSupportFragmentManager(), null);
        }
    });


    timer.schedule(task, 1000, 5000);


}

TimerTask task = new TimerTask() {
    public void run() {
        if (dia!=null){

            ((DiagFragment) dia).setData2(String.valueOf((Math.random() * 10)));

        }
    }
};


public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.list_dialog,null);
    mContext=getActivity();

    initView(view);

    return view;
}


public void initView(View view){
    tx1=(TextView)view.findViewById(R.id.tv_1);
     tx2=(TextView)view.findViewById(R.id.txv_2);

}



public void setData2(String string) {

    str2=string;
    Log.w(TAG, "setData2: "+string );
    tx2.setText(string);

}

我可以获取有关碎片的数据,但是当我将数据添加到 TextVIew (tx2) 时出现错误

错误信息是:

   java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.soundgil.dailogonclicklistend.DiagFragment.setData2(DiagFragment.java:68)
        at com.soundgil.dailogonclicklistend.MainActivity$2.run(MainActivity.java:54)

标签: javaandroid

解决方案


似乎tx2没有正确找到它,所以它为空。尝试检查布局 xml(您的视图 ID 是否正确?)或将其放上去。

顺便说一句,TimerTask.run()它是在子线程中运行的,因此您无法更新 UI。UI 必须在主线程中操作。尝试使用这样的处理程序:

Handler handler = new Handler(){
    public void handleMessage(Message message){
        if (message.what == 0 && dia!=null){
             ((DiagFragment) dia).setData2(String.valueOf((Math.random() * 10)));
        }
    }
};

TimerTask task = new TimerTask() {
    public void run() {
        handler.sendEmptyMessage(0);
    }
};

推荐阅读