Я пытаюсь прочитать список мониторов, которые имеют в качестве атрибута регистрационный номер, владельца производителя и т. Д. Из файла json, который доступен по этой ссылке: https://api.myjson.com/bins/dkit2
Я использовал тост, а такжеLog.d и я заметил, что чтение JSON работает просто отлично.Элементы внесены в список.Единственное, что не работает - это отображение listView с элементом из списка.Что-нибудь о onPostExecute и listView diplaying, что мне не хватает?Появится сообщение «К сожалению, приложение Monitor_application остановлено».У меня нет никаких журналов.Нет стека ошибок или чего-то еще.Он просто существует и отображает это сообщение.Я что-то не так делаю в CustomAdapter?
[РЕШЕНИЕ] Я наконец понял это.Я забыл установить одно поле объекта, и когда listView пытался отобразить это точное поле, которое не было установлено и оставлено нулевым, оно зависало.Спасибо всем за потраченное время и усилия на решение этой проблемы.
У меня есть следующие классы:
public class JsonReading extends AppCompatActivity {
public ListView listView;
ArrayList<Monitor> lista=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json_reading);
Worker worker=new Worker();
worker.execute();
}
public class Worker extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... voids) {
HttpURLConnection connection=null;
InputStream inputStream=null;
InputStreamReader inputStreamReader=null;
BufferedReader bufferedReader=null;
try {
URL url=new URL("https://api.myjson.com/bins/dkit2");
connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
//connection.connect();
Log.d("JSON","Se deschide conexiunea");
inputStream=connection.getInputStream();
inputStreamReader=new InputStreamReader(inputStream);
bufferedReader=new BufferedReader(inputStreamReader);
String line=null;
StringBuilder builder=new StringBuilder();
while((line=bufferedReader.readLine())!=null){
Log.d("JSON",line);
builder.append(line);
}
String entireJson=builder.toString();
Log.d("JSON",entireJson);
JSONObject monitors=new JSONObject(entireJson);
JSONArray listaJson=monitors.getJSONArray("monitors");
for(int i=0;i<listaJson.length();i++){
JSONObject elementLista=listaJson.getJSONObject(i);
Log.d("JSON",elementLista.toString());
Monitor monitorNou=new Monitor();
monitorNou.setNr_inventar(Integer.parseInt(elementLista.getString("serviceNumber")));
monitorNou.setProducator(elementLista.getString("producer"));
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd-mm-yyyy");
monitorNou.setData_intrarii(simpleDateFormat.parse(elementLista.getString("serviceDate")));
//diagonal
monitorNou.setDiagonala(Integer.parseInt(elementLista.getString("diagonal")));
//tip
String tip=elementLista.getString(elementLista.getString("tip"));
if(tip.equals("ALB")){
monitorNou.setTipMonitor(EnumTipMonitor.ALB);
}else{
monitorNou.setTipMonitor(EnumTipMonitor.NEGRU);
}
//owner
monitorNou.setProprietar(elementLista.getString("owner"));
lista.add(monitorNou);
}
}catch (MalformedURLException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}finally {
if(bufferedReader!=null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(inputStreamReader!=null){
try {
inputStreamReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(inputStream!=null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(connection!=null){
connection.disconnect();
}
}
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
//afisare in listView
if(lista!=null){
//I believe this is the problem since the listView is not displayed
listView=(ListView)findViewById(R.id.listView_json);
CustomAdapter adapter=new CustomAdapter(getApplicationContext(),R.layout.row_list_item,lista);
listView.setAdapter(adapter);
}
}
}
}
В своей основной деятельности явызов действия jsonReading следующим образом:
public void readJson(View view){
Intent intentJson=new Intent(MainActivity.this,JsonReading.class);
startActivity(intentJson);
finish();
}
Код для CustomAdapter приведен ниже.Я должен упомянуть, что я использую его в другой деятельности, и он прекрасно работает.
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;
}
}
XML для row_list_item:
<?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>
, а такжеXML для JSONReading деятельности
<?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>