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() + "€";
}
}
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
User contributions licensed under CC BY-SA 3.0