- 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/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!