java - Android 应用程序在列出列表视图的项目时崩溃
问题描述
在我的应用程序启动时,114 个元素的列表被添加到应用程序首页上显示的 listView 中。Spielortadapter
当通过第二个元素 Distanz/km 时,它在类中崩溃。TextView 已正确构建并且来自的数据getDistanz()
可以正常工作,但是setText()
随后崩溃并带有以下跟踪:
*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*
主要活动
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) {
}
});
}
}
Spielort适配器
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>
斯皮洛特
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() + "€";
}
}
解决方案
正如我所想,这是不正确的,因为您从 getDistanz() 返回一个 int
当 setText 传入 int 时,它会在 R.string 中寻找资源 id。返回的整数不是有效的资源 ID。
你需要做的是这个
km.setText(Integer.toString(ort.getDistanz()));
这将确保您传递 setText 一个字符串
推荐阅读
- transparency - 如何解决本机基础中的抽屉透明度问题
- python - 如何在 Jupyter Notebook 中隐藏错误消息?
- google-app-engine - 405 Err on OPTIONS preflight for upload_url on Google Appengine SDK on different port #
- sharepoint - Sharepoint2016 自定义列表
- node.js - 通过 spawn、exec 关闭使用节点打开的软件
- java - '"python" 无法识别' 错误,但仅在从 Java 运行时
- node.js - Express 中间件流程
- javascript - 寻找一个用于 4 个工作表标签的 Google Script App 以生成一个 json
- apache-nifi - 拆分字符串数组并将每个字符串放在 nifi 中的流文件属性上
- python - 如何使用 PyArrow 从 s3 读取定义的镶木地板文件列表?