我正在尝试从json文件中读取具有作为属性注册号,生产者所有者等的监视器列表,该文件可通过以下链接访问: https://api.myjson.com/bins/dkit2
我使用了Toast和Log.d,我注意到json读取效果很好。这些元素在列表中引入。唯一不起作用的是使用列表中的元素显示listView。是否有任何关于onPostExecute和listView diplaying我缺少什么? 显示消息是“不幸的是,Monitor_application已经停止”。我没有任何日志。没有错误堆栈或任何东西。它只是存在并显示该消息。 我在CustomAdapter中做错了吗?
[溶液] 我终于明白了。我忘了设置对象的一个字段,当listView试图显示那个没有设置并且保留为null的确切字段时,它崩溃了。感谢大家为解决这个问题付出的时间和精力。
我有以下课程:
public void readJson(View view){
Intent intentJson=new Intent(MainActivity.this,JsonReading.class);
startActivity(intentJson);
finish();
}
}
在我的主要活动中,我正在调用jsonReading活动:
public class CustomAdapter extends ArrayAdapter {
TextView mon_nrInreg;
TextView mon_producator;
TextView mon_diagonala;
TextView mon_proprietar;
TextView mon_data;
TextView mon_tip;
public CustomAdapter(Context context, int resource, ArrayList<Monitor> list){
super(context,resource,list);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if(convertView==null){
LayoutInflater layoutInflater=LayoutInflater.from(getContext());
convertView=LayoutInflater.from(getContext()).inflate(R.layout.row_list_item,null,false);
}
Monitor m=(Monitor)getItem(position);
mon_nrInreg=convertView.findViewById(R.id.tv_nr);
mon_producator=convertView.findViewById(R.id.tv_prod);
mon_proprietar=convertView.findViewById(R.id.tv_proprietar);
mon_diagonala=convertView.findViewById(R.id.tv_diag);
mon_tip=convertView.findViewById(R.id.tv_tip);
mon_data=convertView.findViewById(R.id.tv_date);
mon_nrInreg.setText(Integer.valueOf(m.getNr_inventar()).toString());
mon_producator.setText(m.getProducator());
mon_proprietar.setText(m.getProprietar());
mon_tip.setText(m.getTipMonitor().toString());
mon_diagonala.setText(Integer.valueOf(m.getDiagonala()).toString());
mon_data.setText(m.getData_intrarii().toString());
return convertView;
}
CustomAdapter的代码如下。我必须提到我将它用于另一个活动,它运作得很好。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_nr"
android:layout_width="97dp"
android:layout_height="61dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:text="numar"
android:textColor="@android:color/holo_red_dark"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_prod"
android:layout_width="255dp"
android:layout_height="61dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:text="producator"
android:textColor="@android:color/background_dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/tv_nr"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_proprietar"
android:layout_width="232dp"
android:layout_height="76dp"
android:textColor="@android:color/background_dark"
android:layout_marginStart="8dp"
android:text="proprietar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_prod" />
<TextView
android:id="@+id/tv_tip"
android:layout_width="120dp"
android:layout_height="61dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:textColor="@android:color/background_dark"
android:layout_marginTop="12dp"
android:text="TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/tv_proprietar"
app:layout_constraintTop_toBottomOf="@+id/tv_prod" />
<TextView
android:id="@+id/tv_date"
android:layout_width="178dp"
android:layout_height="52dp"
android:layout_marginBottom="8dp"
android:textColor="@android:color/background_dark"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_proprietar"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/tv_diag"
android:layout_width="177dp"
android:layout_height="52dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="TextView"
android:textColor="@android:color/background_dark"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@+id/tv_date"
app:layout_constraintTop_toBottomOf="@+id/tv_tip"
app:layout_constraintVertical_bias="0.008" />
</android.support.constraint.ConstraintLayout>
}
row_list_item的xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".JsonReading">
<ListView
android:id="@+id/listView_json"
android:layout_width="368dp"
android:layout_height="551dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
以及jsonReading活动的xml
{{1}}
答案 0 :(得分:1)
我终于明白了。我忘了设置对象的一个字段,当listView试图显示那个没有设置并且保留为null的确切字段时,它崩溃了。感谢大家为解决这个问题付出的时间和精力。
答案 1 :(得分:0)
尝试在try catch中添加这些行:
mon_nrInreg.setText(Integer.valueOf(m.getNr_inventar()).toString());
mon_diagonala.setText(Integer.valueOf(m.getDiagonala()).toString());
到
try{
mon_nrInreg.setText(Integer.valueOf(m.getNr_inventar()).toString());
mon_diagonala.setText(Integer.valueOf(m.getDiagonala()).toString());
}
catch(Exception e){
Log.e("crash_reason",e.toString()+"");
}
答案 2 :(得分:0)
可能是在单独的线程上运行ui操作的问题。所有ui操作都需要在主线程上运行。试着把它放在你在postexecute中做的工作。
runOnUiThread(new Runnable() {
public void run() {
//Whatever task you wish to perform
}
});