我刚刚开始学习android编程。(抱歉我的英语不好,但我是荷兰人;-))
我已经创建了一个带有图标和文字的自定义列表适配器。那部分有效但...... 我从我网站上的文件中获取信息,根据该信息,我希望在文本之前有一个特定的图标,但这不起作用。 文件看起来像这个“1,1,1,1,1,1,1,1,24,65,93,x” 如果第一个字符是“1”,那么我想要一个bulpon图标,如果是“0”,我想要一个bulpoff图标。
if (locatie[position] == "Huiskamer - achter TV" && str[0].equals("1")) {
icon.setImageResource(R.drawable.bulpon);
} else {
icon.setImageResource(R.drawable.bulpoff);
}
this doesn't work but
This works.:
if (locatie[position] == "Huiskamer - achter TV" ) {
icon.setImageResource(R.drawable.bulpon);
} else {
icon.setImageResource(R.drawable.bulpoff);
}
str [0]我来自oncreate调用的方法。
这是我的代码。
package nl.ernst.splash;
public class Binnen extends ListActivity {
final String textSource = ("http://www.airbrush-ernst.nl/duinotest.txt"); // data van inputs arduino
String str[];
public class MyCustomAdapter extends ArrayAdapter<String> {
public MyCustomAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// return super.getView(position, convertView, parent);
View row = convertView;
if (row == null) {
LayoutInflater inflater = getLayoutInflater();
row = inflater.inflate(R.layout.row, parent, false);
}
TextView label = (TextView) row.findViewById(R.id.weekofday);
label.setText(locatie[position]);
ImageView icon = (ImageView) row.findViewById(R.id.icon);
if ((locatie[position] == "Huiskamer - achter TV") && (str[0].equals("1"))) {
icon.setImageResource(R.drawable.bulpon);
} else {
icon.setImageResource(R.drawable.bulpoff);
}
return row;
}
}
String[] locatie = { "Huiskamer - achter TV", "Huiskamer - kast",
"Huiskamer - schildpadden", "Keuken", "Voordeur" };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
haaldata();
setListAdapter(new MyCustomAdapter(Binnen.this, R.layout.row, locatie));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
// super.onListItemClick(l, v, position, id);
String selection = l.getItemAtPosition(position).toString();
Toast.makeText(this, selection, Toast.LENGTH_SHORT).show();
}
private void haaldata() {
// TODO Auto-generated method stub
URL textUrl;
try {
textUrl = new URL(textSource);
BufferedReader bufferReader = new BufferedReader(
new InputStreamReader(textUrl.openStream()));
String StringBuffer;
String stringText = "";
while ((StringBuffer = bufferReader.readLine()) != null) {
stringText += StringBuffer;
}
bufferReader.close();
String str[] = stringText.split(",");
//test
if(str[0].equals("1"))
Toast.makeText(Binnen.this, str[0], Toast.LENGTH_SHORT).show();
// setTogglebuttons(stringText); //methode om togglebuttons te
// setten
// binnen.setText("binnen= " + str[8] + "\t graden Celsius");
// buiten.setText("buiten= " + str[9] + "\t graden Celsius");
// mprogress.setProgress(Integer.parseInt(str[10])); // set
// progresbar
// bar.setText(str[10]); // voor LDR
// waarde
// msg.setText(stringText);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}// class Binnen
这是我的日志猫
12-26 12:02:49.009: I/global(279): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
12-26 12:03:38.129: W/KeyCharacterMap(279): No keyboard for id 0
12-26 12:03:38.129: W/KeyCharacterMap(279): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
12-26 12:03:39.948: I/global(279): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
12-26 12:04:36.769: I/global(311): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
12-26 12:06:17.428: I/global(339): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
12-26 12:08:16.408: I/global(368): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
12-26 12:08:16.459: D/AndroidRuntime(368): Shutting down VM
12-26 12:08:16.459: W/dalvikvm(368): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-26 12:08:16.488: E/AndroidRuntime(368): FATAL EXCEPTION: main
12-26 12:08:16.488: E/AndroidRuntime(368): java.lang.NullPointerException
12-26 12:08:16.488: E/AndroidRuntime(368): at nl.ernst.splash.Binnen$MyCustomAdapter.getView(Binnen.java:56)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.ListView.makeAndAddView(ListView.java:1727)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.ListView.fillDown(ListView.java:652)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.ListView.fillFromTop(ListView.java:709)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.ListView.layoutChildren(ListView.java:1580)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.AbsListView.onLayout(AbsListView.java:1147)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.view.View.layout(View.java:7035)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.view.View.layout(View.java:7035)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.view.View.layout(View.java:7035)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.view.View.layout(View.java:7035)
12-26 1 2:08:16.488: E/AndroidRuntime(368): at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
12-26 1 2:08:16.488: E/AndroidRuntime(368): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.os.Looper.loop(Looper.java:123)
12-26 12:08:16.488: E/AndroidRuntime(368): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-26 12:08:16.488: E/AndroidRuntime(368): at java.lang.reflect.Method.invokeNative(Native Method)
12-26 12:08:16.488: E/AndroidRuntime(368): at java.lang.reflect.Method.invoke(Method.java:521)
12-26 12:08:16.488: E/AndroidRuntime(368): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-26 12:08:16.488: E/AndroidRuntime(368): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-26 12:08:16.488: E/AndroidRuntime(368): at dalvik.system.NativeStart.main(Native Method)
12-26 13:14:07.798: I/global(398): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
12-26 13:14:07.848: D/AndroidRuntime(398): Shutting down VM
12-26 13:14:07.848: W/dalvikvm(398): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-26 13:14:07.858: E/AndroidRuntime(398): FATAL EXCEPTION: main
12-26 13:14:07.858: E/AndroidRuntime(398): java.lang.NullPointerException
12-26 13:14:07.858: E/AndroidRuntime(398): at nl.ernst.splash.Binnen$MyCustomAdapter.getView(Binnen.java:52)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.ListView.makeAndAddView(ListView.java:1727)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.ListView.fillDown(ListView.java:652)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.ListView.fillFromTop(ListView.java:709)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.ListView.layoutChildren(ListView.java:1580)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.AbsListView.onLayout(AbsListView.java:1147)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.view.View.layout(View.java:7035)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.view.View.layout(View.java:7035)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.view.View.layout(View.java:7035)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.view.View.layout(View.java:7035)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.os.Looper.loop(Looper.java:123)
12-26 13:14:07.858: E/AndroidRuntime(398): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-26 13:14:07.858: E/AndroidRuntime(398): at java.lang.reflect.Method.invokeNative(Native Method)
12-26 13:14:07.858: E/AndroidRuntime(398): at java.lang.reflect.Method.invoke(Method.java:521)
12-26 13:14:07.858: E/AndroidRuntime(398): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-26 13:14:07.858: E/AndroidRuntime(398): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-26 13:14:07.858: E/AndroidRuntime(398): at dalvik.system.NativeStart.main(Native Method)
12-26 13:19:07.919: I/Process(398): Sending signal. PID: 398 SIG: 9
提前Tnx
Gr Ernst
答案 0 :(得分:0)
你必须把这样的条件
if ((locatie[position].equals("Huiskamer - achter TV")) && (str[0].equals("1"))) {
icon.setImageResource(R.drawable.bulpon);
} else {
icon.setImageResource(R.drawable.bulpoff);
}
将条件括在括号内。
请在条件之上初始化locatie数组。 并检查上面的条件
答案 1 :(得分:0)
修正了我自己的问题: - )
在我的haaldata方法中,我改变了一些东西:
if(str[0].equals("1")){
on1 = true;
}else{on1 =false;}
if(str[1].equals("1")){
on2 = true;
}else{on2 =false;}
然后在我的getview()方法中我改变了:
if (locatie[position] == "Huiskamer - achter TV" && on1) {
icon.setImageResource(R.drawable.bulpon);
} else if (locatie[position] == "Huiskamer - kast" && on2) {
icon.setImageResource(R.drawable.bulpon);
} else {
icon.setImageResource(R.drawable.bulpoff);
}
现在有效!
也许它可以帮助别人。
Gr ernst