java - 如何修复 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)
解决方案
似乎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);
}
};
推荐阅读
- node.js - 无法在链接更改时呈现新组件
- flutter - 如何从 Google Drive 链接播放视频?
- c++ - 未找到 QT 项目的 UI_project.h
- javascript - 自定义身份验证 Firebase
- html - Bootstrap:向右浮动正方形(col-md-4),但高度仅为 200 像素?
- sockets - Zmq_Push 和 Zmq_Pull 连接丢包
- python - 如何在 Windows 上引用路径?(类似于 shlex.quote)
- python - 如何在具有多个数据框列输入的 sklearn 管道中编写转换器
- r - dplyr 还是计算向量中每个唯一值的数量的整洁方法?
- javascript - ChartJs,如何在折线图中的两个数据集之间获得不同的颜色填充?