Android应用程序在onPostExecute()中崩溃,没有任何错误

时间:2018-06-13 13:17:13

标签: android android-studio listview android-asynctask custom-adapter

我正在尝试从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}}

3 个答案:

答案 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
  }
});