MySQLデータベースからデータを読み取るAndroidアプリを開発していますが、このエラーに直面しました。私はこの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"
Android:orientation="vertical" >
<TextView Android:id="@+id/wardNumber"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="3dp"
Android:text="Ward Number"
Android:textSize="22dp"/>
<TextView Android:id="@+id/dateTime"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/wardNumber"
Android:layout_alignParentRight="true"
Android:layout_marginRight="3dp"
Android:text="Date-Time" />
<TextView
Android:id="@+id/name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignBaseline="@+id/dateTime"
Android:layout_alignBottom="@+id/dateTime"
Android:layout_alignLeft="@+id/wardNumber"
Android:layout_marginLeft="3dp"
Android:text="Name" />
</RelativeLayout>
そして、これは私のJavaファイルです:
public ApplicationAdapter(Context context, List<Application> items) {
super(context, R.layout.app_custom_list, items);
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null) {
LayoutInflater li = LayoutInflater.from(getContext());
v = li.inflate(R.layout.app_custom_list, null);
}
Application app = items.get(position);
if(app != null) {
// ImageView icon = (ImageView)v.findViewById(R.id.appIcon);
TextView wardNumber = (TextView)v.findViewById(R.id.wardNumber);
TextView name = (TextView)v.findViewById(R.id.name);
// LinearLayout ratingCntr = (LinearLayout)v.findViewById(R.id.ratingCntr);
TextView dateTime = (TextView)v.findViewById(R.id.dateTime);
// if(icon != null) {
// Resources res = getContext().getResources();
// String sIcon = "com.sj.jsondemo:drawable/" + app.getIcon();
// icon.setImageDrawable(res.getDrawable(res.getIdentifier(sIcon, null, null)));
// }
if(wardNumber != null) wardNumber.setText(app.getTitle());
if(name != null) name.setText(app.getTitle());
if(dateTime != null) {
dateTime.setText(app.getTotalDl());
// NumberFormat nf = NumberFormat.getNumberInstance();
// dateTime.setText(nf.format(app.getTotalDl())+" dl");
}
}
return v;
}
}
このアクティビティが呼び出されると、次のエラーメッセージが表示されます。
11-24 21:12:03.633: E/AndroidRuntime(1251): FATAL EXCEPTION: main
11-24 21:12:03.633: E/AndroidRuntime(1251): Android.content.res.Resources$NotFoundException: String resource ID #0x0
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.content.res.Resources.getText(Resources.Java:201)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.TextView.setText(TextView.Java:2863)
11-24 21:12:03.633: E/AndroidRuntime(1251): at com.sj.jsondemo.Appl icationAdapter.getView(ApplicationAdapter.Java:53)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.AbsListView.obtainView(AbsListView.Java:1430)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.ListView.measureHeightOfChildren(ListView.Java:1216)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.ListView.onMeasure(ListView.Java:1127)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.View.measure(View.Java:8313)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:3138)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.Java:1017)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.LinearLayout.measureHorizontal(LinearLayout.Java:701)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.LinearLayout.onMeasure(LinearLayout.Java:311)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.View.measure(View.Java:8313)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:3138)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:250)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.View.measure(View.Java:8313)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.LinearLayout.measureVertical(LinearLayout.Java:531)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.LinearLayout.onMeasure(LinearLayout.Java:309)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.View.measure(View.Java:8313)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.ViewGroup.measureChildWithMargins(ViewGroup.Java:3138)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.widget.FrameLayout.onMeasure(FrameLayout.Java:250)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.View.measure(View.Java:8313)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.ViewRoot.performTraversals(ViewRoot.Java:839)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.view.ViewRoot.handleMessage(ViewRoot.Java:1859)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.os.Handler.dispatchMessage(Handler.Java:99)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.os.Looper.loop(Looper.Java:130)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Android.app.ActivityThread.main(ActivityThread.Java:3683)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Java.lang.reflect.Method.invokeNative(Native Method)
11-24 21:12:03.633: E/AndroidRuntime(1251): at Java.lang.reflect.Method.invoke(Method.Java:507)
11-24 21:12:03.633: E/AndroidRuntime(1251): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:839)
11-24 21:12:03.633: E/AndroidRuntime(1251): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:597)
11-24 21:12:03.633: E/AndroidRuntime(1251): at dalvik.system.NativeStart.main(Native Method)
11-24 21:12:08.922: I/Process(1251): Sending signal. PID: 1251 SIG: 9
このエラーを修正する方法がわかりません。
変化する
dateTime.setText(app.getTotalDl());
に
dateTime.setText(String.valueOf(app.getTotalDl()));
setText
にはさまざまなバージョンがあります。1つはストリングを受け取り、もう1つはintリソースIDを受け取ります。整数を渡すと、対応する文字列リソースIDを検索しようとします-見つからないため、エラーになります。
app.getTotalDl()
はintを返します。このintの文字列値に設定するようにsetText
に具体的に指示する必要があります。
交換
dateTime.setText(app.getTotalDl());
と
dateTime.setText(""+app.getTotalDl());
Edittext
またはtextview
にテキストを設定しようとすると、文字列形式のみを渡す必要があります。
dateTime.setText(app.getTotalDl());
に
dateTime.setText(String.valueOf(app.getTotalDl()));
Settextの評価値は整数であったため、それに接続されたリソースが表示されませんでしたが、文字列になるようにテキストを設定したいので、.toStringe
またはString.valueOf(int)
を添付して整数を文字列に変換すると問題が解決します!