- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在用户请求或单击按钮时在 ListView 中显示一些条件数据。每个列表行都有两个值,一个值是名称,第二个是它的描述。当用户按下按钮时,它会触发命令并从外设获取信息,并逐个匹配具有不同条件的所有值,因为条件与值匹配,它会在所有条件检查后将一个列表行值放入适配器,它将适配器分配给 ListView ,然后显示所有适配器数据将显示在 ListView 中。
这是我的代码
公共(public)类 DTCode 扩展 Activity { private final static String TAG = DTCode.class.getSimpleName();
final static String EXTRA_DEVICE_ADDRESS = "DEVICE_ADDRESS";
public String mDeviceAddress;
public BluetoothLeService mBluetoothLeService;
private boolean mConnected = false;
Button btnread, btnclear;
String receiveData = "";
ListView myList;
ErrorsAdapter adapter;
ArrayList<Error> arrayofErrors;
Error error;
ListView listError;
//Code for get Service;
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder service) {
mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService();
if (!mBluetoothLeService.initialize()){
Log.e(TAG, "Bluetooth is not initialize");
finish();
}
Log.e(TAG,"Bluetooth Service is oKay");
mBluetoothLeService.connect(mDeviceAddress);
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
mBluetoothLeService = null;
}
};
private final BroadcastReceiver mGattUpdateReceiver= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)){
Log.e(TAG, "Only Gatt, Just Wait");
} else if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)){
mConnected = false;
invalidateOptionsMenu();
btnclear.setEnabled(false);
btnread.setEnabled(false);
}else if (BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)){
mConnected =true;
btnread.setEnabled(true);
Log.e(TAG,"In what we need");
}else if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)){
Log.e(TAG,"Receive Data");
String data = intent.getStringExtra(BluetoothLeService.EXTRA_DATA);
if (data != null){
btnclear.setEnabled(true);
receiveData = receiveData.concat(data);
char character = receiveData.charAt(receiveData.length() - 1 );
System.out.println(receiveData);
if (character == '\n'){
String[] err = receiveData.split("!");
for (int i = 0 ; i < err.length ; i++) {
String[] errCode = err[i].split("_");
for (int j = 0; j < errCode.length; j++) {
System.out.println(errCode[j]);
if (errCode[j].startsWith("108E07")){
error = new Error("DIM-B108E07", "Display failure Information");
adapter.add(error);
}else if (errCode[j].startsWith("115C71")){
error = new Error("DIM-B115C71", "Transfer Fuel Pump. Actuator Stuck");
adapter.add(error);
}else if (errCode[j].startsWith("1A0107")){
error = new Error("DIM-B1A0107","Speaker #1 Failure.");
adapter.add(error);
}else if (errCode[j].startsWith("1B6916")){
error = new Error("DIM-B1B6916","Circuit Voltage Below Threshold.");
adapter.add(error);
}else if (errCode[j].startsWith("1B6917")){
error = new Error("DIM-B1B6917","Circuit Voltage above Threshold");
adapter.add(error);
}else if (errCode[j].startsWith("1A4815")){
error = new Error("DIM-C1A4815", "Short Circuit to Battery or Open.");
adapter.add(error);
}else if (errCode[j].startsWith("600262")){
error = new Error("DIM-C200262", "Odometer Tempered");
adapter.add(error);
}else if (errCode[j].startsWith("046071")){
error = new Error("DIM-P0460171","Fuel Level A Circuit, Actuator Stuck.");
adapter.add(error);
}else if (errCode[j].startsWith("134671")){
error = new Error("DIM-P134671","Fuel Level B Circuit, Actuator Stuck.");
adapter.add(error);
}else if (errCode[j].startsWith("C00155")){
error = new Error("DIM-U000155","High Speed can not Configured.");
adapter.add(error);
}else if (errCode[j].startsWith("C00188")){
error = new Error("DIM-U000188","High Speed Can Bus Off.");
adapter.add(error);
}else if (errCode[j].startsWith("C01055")){
error = new Error("DIM-U001055","Medium Speed Can Not Configured.");
adapter.add(error);
}else if (errCode[j].startsWith("C01088")){
error = new Error("DIM-U001088","Medium Speed Can Bus Off.");
adapter.add(error);
}else if (errCode[j].startsWith("C10000")){
error = new Error("DIM-U010000","Lost Communication with ECM.");
adapter.add(error);
}else if (errCode[j].startsWith("C10100")){
error = new Error("DIM-U010100","Lost Communication with TCM.");
adapter.add(error);
}else if (errCode[j].startsWith("C10400")){
error = new Error("DIM-U010400","Lost Communication with FSM.");
adapter.add(error);
}else if (errCode[j].startsWith("C12100")){
error = new Error("DIM-U012100","Lost Communication with ABS");
adapter.add(error);
}else if (errCode[j].startsWith("C14000")){
error = new Error("DIM-U014000","Lost Communication with CEM.");
adapter.add(error);
}else if (errCode[j].startsWith("C15100")){
error = new Error("DIM-U015100","Lost Communication with SRSM.");
adapter.add(error);
}else if (errCode[j].startsWith("C15600")){
error = new Error("DIM-U015600","Lost Communication with ICM.");
adapter.add(error);
}else if (errCode[j].startsWith("C15900")){
error = new Error("DIM-U015900","Lost Communication with PAM.");
adapter.add(error);
}else if (errCode[j].startsWith("C25000")){
error = new Error("DIM-U025000","Lost Communication with PPM.");
adapter.add(error);
}else if (errCode[j].startsWith("C25200")){
error = new Error("DIM-U025200","Lost Communication with TRM.");
adapter.add(error);
}else if (errCode[j].startsWith("C40168")){
error = new Error("DIM-U040168","Invalid Data Received from ECM/PCM.");
adapter.add(error);
}else if (errCode[j].startsWith("C40268")){
error = new Error("DIM-U040268","Invalid Data Received from TCM.");
adapter.add(error);
}else if (errCode[j].startsWith("C41568")){
error = new Error("DIM-U041568","Invalid Data Received from ABS.");
adapter.add(error);
}else if (errCode[j].startsWith("C42268")){
error = new Error("DIM-U042268","Invalid Data Received from CEM.");
adapter.add(error);
}else if (errCode[j].startsWith("C45292")){
error = new Error("DIM-U045292","Invalid Data Received from SRS.");
adapter.add(error);
}else if (errCode[j].startsWith("C55168")){
error = new Error("DIM-U055168","Invalid Data Received from PPM.");
adapter.add(error);
}else if (errCode[j].startsWith("DA4B49")){
error = new Error("DIM-U1A4B49","Internal Electronic Failure.");
adapter.add(error);
}else if (errCode[j].startsWith("E10000")){
error = new Error("DIM-U210000","Control Module not Configured.");
adapter.add(error);
}else if (errCode[j].startsWith("E10100")){
error = new Error("DIM-U210100","Control Module Configuration Incompatible.");
adapter.add(error);
}else if (errCode[j].startsWith("F00044")){
error = new Error("DIM-U300044","Data Memory failure.");
adapter.add(error);
}else if (errCode[j].startsWith("F00045")){
error = new Error("DIM-U300045","Program Memory Failure.");
adapter.add(error);
}else if (errCode[j].startsWith("F00362")){
error = new Error("DIM-U300362","Signal Compare Failure.");
adapter.add(error);
}
}
}
listError.setAdapter(adapter);
}
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dtcode);
final Intent intent = getIntent();
mDeviceAddress = intent.getStringExtra(EXTRA_DEVICE_ADDRESS);
btnread = (Button) findViewById(R.id.read);
btnread.setEnabled(false);
btnclear= (Button) findViewById(R.id.clr);
btnclear.setEnabled(false);
arrayofErrors = new ArrayList<Error>();
adapter = new ErrorsAdapter(this, arrayofErrors);
listError = (ListView) findViewById(R.id.list);
getActionBar().setTitle("TFT Trouble Code");
getActionBar().setDisplayHomeAsUpEnabled(true);
Log.d(TAG, "Try to bindService=" + bindService(new Intent(this, BluetoothLeService.class), mServiceConnection, BIND_AUTO_CREATE));
registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());
}
@Override
protected void onResume(){
super.onResume();
registerReceiver(mGattUpdateReceiver,makeGattUpdateIntentFilter());
if (mBluetoothLeService != null){
final boolean result = mBluetoothLeService.connect(mDeviceAddress);
Log.d(TAG,"Connect Result="+ result);
}
}
@Override
protected void onPause(){
super.onPause();
unregisterReceiver(mGattUpdateReceiver);
unbindService(mServiceConnection);
}
@Override
protected void onDestroy(){
if (mBluetoothLeService != null){
mBluetoothLeService.close();
mBluetoothLeService = null;
}
Log.d(TAG, "We are in Destroy");
}
public void onClick (View v){
if (v == btnread){
if(!mConnected) return;
mBluetoothLeService.WriteValue("$DIM_RE\n");
}
if (v == btnclear){
if(!mConnected) return;
mBluetoothLeService.WriteValue("$DIM_CLR\n");
myList.setAdapter(null);
}
}
public class ErrorsAdapter extends ArrayAdapter<Error>{
public ErrorsAdapter(Context context, ArrayList<Error> errors){
super(context, 0, errors);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
Error error = getItem(position);
if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_error, parent, false);
}
TextView ecTxt = (TextView) findViewById(R.id.txt_error_code);
TextView edTxt = (TextView) findViewById(R.id.txt_error_description);
ecTxt.setText(error.errorCode);
edTxt.setText(error.errorDescription);
return convertView;
}
}
最佳答案
在适配器的 getView
中,替换
TextView ecTxt = (TextView) findViewById(R.id.txt_error_code);
TextView edTxt = (TextView) findViewById(R.id.txt_error_description);
与
TextView ecTxt = (TextView) convertView.findViewById(R.id.txt_error_code);
TextView edTxt = (TextView) convertView.findViewById(R.id.txt_error_description);
关于android - 为列表项设置值时自定义适配器中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30759301/
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!