Android App crashes while listing up items for listview

0

On start of my app, a list of 114 elements is added to a listView displayed on the app's front page. It crashes in the class Spielortadapter, when going through the second element, Distanz/km. The TextView is built up correctly and the data from getDistanz() works correctly, but the setText() crashes then with the following trace:

*E/oid.distanceap: Invalid ID 0x0000001a.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: fasde.android.distanceapp, PID: 13892
    android.content.res.Resources$NotFoundException: String resource ID #0x1a
        at android.content.res.Resources.getText(Resources.java:430)
        at android.content.res.HwResources.getText(HwResources.java:463)
        at android.widget.TextView.setText(TextView.java:6019)
        at fasde.android.distanceapp.SpielortAdapter.getView(SpielortAdapter.java:41)
        at android.widget.AbsListView.obtainView(AbsListView.java:2451)
        at android.widget.HwAbsListView.obtainView(HwAbsListView.java:935)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1426)
        at android.widget.ListView.onMeasure(ListView.java:1333)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565)
        at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1209)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:728)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:401)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:726)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:847)
        at android.view.View.measure(View.java:23466)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2954)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1753)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2041)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1636)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7946)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092)
        at android.view.Choreographer.doCallbacks(Choreographer.java:893)
        at android.view.Choreographer.doFrame(Choreographer.java:812)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1078)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
I/Process: Sending signal. PID: 13892 SIG: 9*

MainActivity


import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;


public class MainActivity extends AppCompatActivity {

    ListView listView;
    SpielortAdapter spielortAdapter;
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.spielort_list);
        editText = findViewById(R.id.inputSearch);

        List<String> setup = new ArrayList<>();
        ArrayList<Spielort> spielorts = new ArrayList<>();

        Map<String, Spielort> vereine = new TreeMap<>();

        for (Spielort ort : Spielort.gottaListEmAll()) {
            vereine.put(ort.getSpielort(), ort);
        }

        for (Map.Entry<String, Spielort> entry : vereine.entrySet()) {
            setup.add(entry.getValue().toString());
            spielorts.add(entry.getValue());
        }


        spielortAdapter = new SpielortAdapter(this, spielorts);

        listView.setAdapter(spielortAdapter);

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                MainActivity.this.spielortAdapter.getFilter().filter(s);
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });


    }


}

SpielortAdapter


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public class SpielortAdapter extends ArrayAdapter<Spielort> {

    private Context context;
    private List<Spielort> spielortList = new ArrayList<>();

    public SpielortAdapter(@NonNull Context context, @LayoutRes ArrayList<Spielort> spielortList) {
        super(context, 0, spielortList);
        this.context = context;
        this.spielortList = spielortList;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View listItem = convertView;
        if (listItem == null) {
            listItem = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
        }
        Spielort ort = spielortList.get(position);

        TextView spielort = listItem.findViewById(R.id.textView_ort);
        spielort.setText(ort.getSpielort());

        TextView km = listItem.findViewById(R.id.textView_km);
        km.setText(ort.getDistanz());

        TextView kosten = listItem.findViewById(R.id.textView_kosten);
        kosten.setText(ort.getKosten().toString());

        TextView kreis = listItem.findViewById(R.id.textView_kreis);
        kreis.setText(ort.getKreis().getName());

        return listItem;
    }

    public void filter(String charSequence) {

    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="fasde.android.distanceapp.MainActivity">

    <EditText android:id="@+id/inputSearch"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Suche nach Ort"
        android:inputType="textVisiblePassword"/>

    <ListView
        android:id="@+id/spielort_list"
        android:layout_marginTop="?android:attr/actionBarSize"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView_ort"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/textView_km"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView_ort"
        android:layout_margin="20dp"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/textView_kosten"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:textSize="20sp"
        android:layout_below="@id/textView_ort"
        android:layout_toRightOf="@id/textView_km"/>

    <TextView
        android:id="@+id/textView_kreis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:textSize="20sp"
        android:layout_below="@id/textView_ort"
        android:layout_toRightOf="@id/textView_kosten"/>

</RelativeLayout>

Spielort

package fasde.android.distanceapp;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;

public class Spielort {

    private String spielort;
    private int distanz;
    private BigDecimal kosten;
    private Kreis kreis;

    public Spielort(String spielort, int distanz, Kreis kreis) {
        this.spielort = spielort;
        this.distanz = distanz;
        this.kosten = new BigDecimal(distanz * 0.30 * 2).setScale(2, RoundingMode.HALF_DOWN);
        this.kreis = kreis;
    }

    public String getSpielort() {
        return spielort;
    }

    public int getDistanz() {
        return distanz;
    }

    public BigDecimal getKosten() {
        return kosten;
    }

    public Kreis getKreis() {
        return kreis;
    }

    public static List<Spielort> gottaListEmAll() {
        List<Spielort> allPlaces = new ArrayList<>();
        allPlaces.addAll(emslandNord());
        allPlaces.addAll(emslandMitte());
        allPlaces.addAll(emslandSued());
        allPlaces.addAll(grafschaft());
        allPlaces.addAll(cloppenburg());
        allPlaces.addAll(osnabrück());
        allPlaces.addAll(ostfriesland());
        return allPlaces;
    }

    public static List<Spielort> emslandNord() {
        List<Spielort> emslandNord = new ArrayList<>();
        emslandNord.add(new Spielort("Ahlen-Steinbild", 33, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Aschendorf", 47, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Aschendorfermoor", 51, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Bockholte", 47, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Bockhorst", 57, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Breddenberg", 49, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Brual", 48, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Börger", 41, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Dersum", 33, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Dörpen", 34, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Eisten-Hüven", 42, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Esterwegen", 60, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Fresenburg", 29, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Heede", 36, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Herbrum", 51, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Hilkenbrook", 65, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Lahn", 44, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Langen (Lathen)", 25, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Lathen", 27, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Lathen-Wahn", 24, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Lehe", 37, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Lorup", 49, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Neubörger", 38, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Neulangen", 19, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Neulehe", 42, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Neurhede", 47, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Ostenwalde", 41, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Papenburg", 58, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Rastdorf", 51, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Renkenberge", 31, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Rhede", 44, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Spahnharrenstätte", 42, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Surwold", 49, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Sögel", 36, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Vrees", 56, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Walchum-Hasselbrock", 29, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Wehm", 48, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Werlte", 47, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Werpeloh", 37, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Wieste", 49, Kreis.EL_NORD));
        emslandNord.add(new Spielort("Wippingen", 32, Kreis.EL_NORD));
        return emslandNord;
    }

    public static List<Spielort> emslandMitte() {
        List<Spielort> emslandMitte = new ArrayList<>();
        emslandMitte.add(new Spielort("Adorf", 26, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Ahmsen", 42, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Apeldorn", 21, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Berßen", 26, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Bokeloh", 15, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("CCI (Emslage)", 7, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Dalum", 19, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Dohren", 36, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Eltern", 30, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Emmeln", 11, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Erika-Altenberge", 15, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Fehndorf", 11, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Flechum", 34, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Fullen", 6, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Geeste", 21, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Groß Hesepe", 15, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Haren", 8, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Haselünne", 30, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Hebelermeer", 11, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Hemsen", 9, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Herssum", 43, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Herzlake", 38, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Holte", 41, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Hülsen-Westerloh", 29, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Lähden", 38, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Landegge", 11, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Lehrte", 22, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Meppen (SV)", 13, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Meppen (Union)", 6, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Neuringe", 24, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Osterbrock", 24, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Polle", 30, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Rütenbrock", 20, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Schleper", 25, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Schwefingen", 15, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Schöningsdorf", 11, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Stavern", 30, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Teglingen", 14, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Tinnen", 14, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Twist (Germania)", 23, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Twist (Grenzland)", 26, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Versen (JVA)", 4, Kreis.EL_MITTE));
        emslandMitte.add(new Spielort("Wesuwe", 2, Kreis.EL_MITTE));
        return emslandMitte;
    }

    public static List<Spielort> emslandSued() {
        List<Spielort> emsLandSued = new ArrayList<>();
        emsLandSued.add(new Spielort("Altenlingen", 30, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Andervenne", 50, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Baccum", 36, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Bawinkel", 31, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Beesten", 48, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Bramhar", 24, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Bramsche", 41, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Brögbern", 31, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Clusorth", 28, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Darme", 37, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Emsbüren", 58, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Freren", 47, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Gersten", 34, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Holthausen-Biene", 24, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Langen (Lengerich)", 36, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Laxten", 24, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Lengerich-Handrup", 40, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Leschede", 52, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Lingen", 30, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Listrup", 58, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Lünne", 46, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Messingen", 43, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Salzbergen", 62, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Schapen", 53, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Schepsdorf", 39, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Spelle-Venahus", 55, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Thuine", 42, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Varenrode", 50, Kreis.EL_SUED));
        emsLandSued.add(new Spielort("Wettrup", 39, Kreis.EL_SUED));
        return emsLandSued;
    }

    public static List<Spielort> grafschaft() {
        List<Spielort> grafschaft = new ArrayList<>();
        grafschaft.add(new Spielort("Nordhorn (WE)", 50, Kreis.GRAFSCHAFT));
        return grafschaft;
    }

    public static List<Spielort> ostfriesland() {
        List<Spielort> ostfriesland = new ArrayList<>();
        return ostfriesland;
    }

    public static List<Spielort> cloppenburg() {
        List<Spielort> cloppenburg = new ArrayList<>();
        return cloppenburg;
    }

    public static List<Spielort> osnabrück() {
        List<Spielort> osna = new ArrayList<>();
        return osna;
    }

    @Override
    public String toString() {
        return this.getSpielort() + "\n" + this.getKreis().getName() + "\t\t--\t\t" + this.getDistanz() + "km" + "\t\t--\t\t" + this.getKosten() + "€";
    }
}
java
android-studio
listview
asked on Stack Overflow Nov 19, 2019 by Fasde • edited Nov 19, 2019 by Fasde

1 Answer

0

As I thought, it is incorrect because you are returning an int from getDistanz()

When setText is passed in an int, it is looking for a resource id in R.string. The integer returned is not a valid resource ID.

What you need to do is this

km.setText(Integer.toString(ort.getDistanz()));

This will make sure you are passing setText a string

answered on Stack Overflow Nov 19, 2019 by Tyler

User contributions licensed under CC BY-SA 3.0