无法将来自 esp32 模块服务器的数据数组拆分到 Android 应用程序。在java中

问题描述 投票:0回答:1

I want to display data to Android Application  the data is coming from Esp32 module to Android Application  but I can't split this array its seems it string  and when I get the index value 9 ..its gave me array array index out of bound 
data = ups/testing/00.2/232/322/433/4323/332/32/332/332/543/453/3454/343/结束这是Esp32服务器模块数据

我从 Docklight 应用程序发送此数据

***我想拆分此数据,但它显示数组索引超出范围,请帮助我,这是我的第一个工作项目,我想尽快完成此任务。


//这是我的Android应用程序的java代码

public void onCharacteristicChanged(最终字节[]数据){

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            String ipData = HexUtil.formatHexString(data);
                            Log.d(Tag+"OP",ipData);
                            if (ipData!=null) {
                                String [] data=ipData.split("/");
                                builderList.clear();
                                convertHaxToASCII(data);
                                setButtonText();
                                setText();
                                alarms.checkAlert(builderList.get(9).toString(), DetailBLE.this);
                            }

                            if (!builderList.isEmpty())
                            {
                                setTitle(builderList.get(1).toString());
                                setArrowsStatus();
                                setBatteryImage();
                            }

                        }
                    });
                }

**我要分割这个数据data = ups/123/334/233/244/24/24/545/56/343/54634/454/End 以数组的形式,然后我通过索引在用户屏幕上显示它 ** 就像 ups --get(0)

就像电源一样--get(1) 就像太阳能--get(2) 就像非太阳能--get(3) 就像电池电量低--get(4) 就像放电电流--get(5)

java android performance bluetooth-lowenergy esp32
1个回答
0
投票
package com.eaproups.test.mynavapp.activity;

import android.annotation.SuppressLint;
import android.app.Dialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattService;
import android.content.Intent;
import android.graphics.Color;
import android.os.Build;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.clj.fastble.BleManager;
import com.clj.fastble.callback.BleIndicateCallback;
import com.clj.fastble.callback.BleMtuChangedCallback;
import com.clj.fastble.callback.BleWriteCallback;
import com.clj.fastble.data.BleDevice;
import com.clj.fastble.exception.BleException;
import com.clj.fastble.utils.HexUtil;

import com.eaproups.test.mynavapp.classes.Alarms;
import com.eaproups.test.mynavapp.classes.ClickDialog;
import com.eaproups.test.mynavapp.classes.ConnectWithMAC;
import com.eaproups.test.mynavapp.classes.NotificationService;
import com.eaproups.test.mynavapp.R;
import com.eaproups.test.mynavapp.conn.Observer;
import com.eaproups.test.mynavapp.conn.ObserverManager;
import com.google.android.material.snackbar.Snackbar;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
public class DetailBLE extends AppCompatActivity implements Serializable, Observer {
    BluetoothAdapter mBluetoothAdapter;

    public static final String Tag="DetailBle";
    boolean MAINSSTATUS;
    boolean SOLARSTATUS;
    boolean UPSSTATUS;
    boolean BATTERYFULL;
    String  CHARGING_STATUS,CHARGING_LABEL;
    View view;
    LinearLayout statusLayout;
    int psckecked;
    Alarms alarms;

    List<StringBuilder> builderList;
    List<BluetoothGattCharacteristic> characteristicsList = new ArrayList<>();
    List<BluetoothGattService> servicesList;
    BleDevice bleDevice;
    BluetoothGattService service;

    LinearLayout solarArrowLoad, solarArrowBattery, gridArrowLoad, gridArrowBattery,batteryArrowLoad;

    TextView solarToloadP,solarToBatteryCur,gridToLoadP,gridToBatteryCu;

    TextView todayPS, totalPS,solarPower,solarCurrent,batteryVolt,batteryCurrent, gridVolt,loadPersent;
    TextView connetionStatus;
    Button upsStatus,upsMode,highCharging,powerSaving;
    ImageView solarPanel,battery,homeLoad,supply;

    int writeFlag;

    ClickDialog clickDialog;



    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail_ble2);
        ObserverManager.getInstance().addObserver(this);
        mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();

        BleDevice bleDevice1 = getIntent().getParcelableExtra("bleDevice"); //BLE class object
        if (bleDevice1 != null){
            start(bleDevice1);
        }
       else {
            Toast.makeText(this, "Please Reconnect", Toast.LENGTH_SHORT).show();
        }

    }
    void start(BleDevice bleDevice1){
        bleDevice=bleDevice1;


        if (bleDevice!=null){


            if (BleManager.getInstance().isConnected(bleDevice)){
                initView();
                setData();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Thread.currentThread().interrupt();
                }
                //notifyClick();
                write("HELLO");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException ex) {
                    Thread.currentThread().interrupt();
                }
                indicate();

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Thread.currentThread().interrupt();
                }

                setMTU();


            }
            else
                Toast.makeText(this, "Device is not connected", Toast.LENGTH_SHORT).show();
            Log.d(Tag+"onCreate","Device id not connected");
        }
        setConnectivityStatus();

    }

    @Override
    protected void onStart() {
        super.onStart();
    }
    @Override
    protected void onResume() {
        //start handler as activity become visible
       // startCkeckStatus();
        super.onResume();
    }


    private void setConnectivityStatus() {
        if (getConnectivityStatus()) {
            connetionStatus.setText(getText(R.string.connected));
            Log.d(Tag,"Connected");
        }
        else {
            connetionStatus.setText(R.string.active_disconnected);
            Log.d(Tag,"Disconnected");
        }

    }

        private boolean getConnectivityStatus() {
            return  BleManager.getInstance().isConnected(bleDevice);
        }



    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (bleDevice!=null){
            BleManager.getInstance().disconnect(bleDevice);
            BleManager.getInstance().destroy();}
        stopNotification();
    }

    private void initView() {
        servicesList = new ArrayList<>();
        builderList= new ArrayList<>();

        connetionStatus=findViewById(R.id.connected_status);

        solarToloadP=findViewById(R.id.solar_to_load_power);
        solarToBatteryCur=findViewById(R.id.solar_to_battery_current);
        gridToLoadP=findViewById(R.id.grid_to_load_power);
        gridToBatteryCu=findViewById(R.id.grid_to_battery_current);

        todayPS=findViewById(R.id.today_power_saved);
        totalPS=findViewById(R.id.total_power_saved);
        solarPower=findViewById(R.id.solar_power);
        //  solarCurrent=findViewById(R.id.solar_current);
        gridVolt =findViewById(R.id.ip_volt);
        loadPersent=findViewById(R.id.load_presentge);
        batteryVolt=findViewById(R.id.battery_volt);
        batteryCurrent=findViewById(R.id.battrery_to_load_power);



        upsStatus=findViewById(R.id.ups_status);
        upsMode=findViewById(R.id.ups_mode);
        highCharging=findViewById(R.id.high_charging);
        powerSaving=findViewById(R.id.power_saving);

        solarPanel=findViewById(R.id.solar_panel);
        supply=findViewById(R.id.supply);
        battery=findViewById(R.id.battery);
        homeLoad=findViewById(R.id.load);

        gridArrowLoad =findViewById(R.id.grid_arroweup);
        gridArrowBattery =findViewById(R.id.grid_arrowdown);

        solarArrowLoad =findViewById(R.id.solar_arrow_up);
        solarArrowBattery =findViewById(R.id.solar_arrow_mid);
        batteryArrowLoad =findViewById(R.id.battery_to_load);

    }

    private void setData() {
        BluetoothGatt gatt = BleManager.getInstance().getBluetoothGatt(bleDevice);
        alarms=new Alarms(DetailBLE.this);

        clickDialog = new ClickDialog(DetailBLE.this);
        view =getWindow().getDecorView().findViewById(android.R.id.content);
        for (BluetoothGattService service : gatt.getServices()) {
            servicesList.add(service);
        }
        service = servicesList.get(2);
        for (BluetoothGattCharacteristic characteristic : service.getCharacteristics()) {
            characteristicsList.add(characteristic);
        }

        /* ************************************* Button ******************************************* */
        upsStatus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!builderList.isEmpty()) {
                    if (upsStatus.getText() == getString(R.string.ups_on)) {
                       // String input = builderList.get(1).toString() + "%" + getString(R.string.ups_off) + "%" + "END";
                        String input = builderList.get(1).toString() + "%" + "OFF"+ "%" + "END";
                        int status = write(input);
                        if (status == 1)
                            upsStatus.setText(getString(R.string.ups_off));
                        else
                            Toast.makeText(DetailBLE.this, "Operation Fail try again",
                                    Toast.LENGTH_SHORT).show();
                    } else {
                      //  String input = builderList.get(1).toString() + "%" + getString(R.string.ups_on) + "%" + "END";
                        String input = builderList.get(1).toString() + "%" + " ON"+ "%" + "END";
                        int status = write(input);
                        if (status == 1)
                            upsStatus.setText(getString(R.string.ups_on));
                        else
                            Toast.makeText(DetailBLE.this, "Operation Fail try again",
                                    Toast.LENGTH_SHORT).show();
                    }
                }

            }
        });

        upsMode.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!builderList.isEmpty()) {
                    if (upsMode.getText() == getString(R.string.ups_mode)) {
                       // String input = builderList.get(1).toString() + "%" + getString(R.string.normal_mode)
                       //         + "%" + "END";
                        String input = builderList.get(1).toString() + "%" + "NOR"+ "%" + "END";
                        int status = write(input);
                        if (status == 1)
                            upsMode.setText(getString(R.string.normal_mode));
                        else
                            Toast.makeText(DetailBLE.this, "Operation Fail try again",
                                    Toast.LENGTH_SHORT).show();
                    } else {
                        //String input = builderList.get(1).toString() + "%" +
                        //        getString(R.string.ups_mode) + "%" + "END";
                        String input = builderList.get(1).toString() + "%" + "UPS"+ "%" + "END";
                        int status = write(input);
                        if (status == 1)
                            upsMode.setText(getString(R.string.ups_mode));
                        else
                            Toast.makeText(DetailBLE.this, "Operation Fail try again",
                                    Toast.LENGTH_SHORT).show();
                    }
                }

            }
        });
        highCharging.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!builderList.isEmpty()) {
                    if (highCharging.getText() == getString(R.string.high_charging)) {
                       // String input = builderList.get(1).toString() + "%" + getString(R.string.low_charging) + "%" + "END";
                        String input = builderList.get(1).toString() + "%" + "LOW"+ "%" + "END";
                        int status = write(input);
                        if (status == 1)
                            highCharging.setText(getString(R.string.low_charging));
                        else
                            Toast.makeText(DetailBLE.this, "Operation Fail try again",
                                    Toast.LENGTH_SHORT).show();
                    } else {
                       // String input = builderList.get(1).toString() + "%" +
                             //   getString(R.string.high_charging) + "%" + "END";
                        String input = builderList.get(1).toString() + "%" + "HIG"+ "%" + "END";
                        int status = write(input);
                        if (status == 1)
                            highCharging.setText(getString(R.string.high_charging));
                        else
                            Toast.makeText(DetailBLE.this, "Operation Fail try again",
                                    Toast.LENGTH_SHORT).show();
                    }
                }

            }
        });

        powerSaving.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!builderList.isEmpty())
                    powerSavingDialog();
            }
        });

        /*------------------------------------ImageView--------------------------------------------*/


            solarPanel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // parameters to pass
                    if (builderList.isEmpty()){
                        clickDialog.solarDialog( "0A","0A");
                    }else {
                        clickDialog.solarDialog((builderList.get(14).toString() + "A"), (builderList.get(13).toString() + "A"));
                    }
                }
            });
            supply.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (builderList.isEmpty()){
                        clickDialog.supplyDialog("0V", "0Hz");
                    }
                    else {
                        clickDialog.supplyDialog((builderList.get(2).toString() + "V"), (builderList.get(6).toString() + "Hz"));
                    }

                }
            });


            battery.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (builderList.isEmpty()) {
                        clickDialog.batteryDialog("0V", 0, "--", "Charging Current");
                    }
                    else {
                        int charged = Integer.parseInt(builderList.get(9).toString());
                        float gridChargingCurrent = Float.parseFloat(builderList.get(10).toString());
                        float solarChargingcurrent = Float.parseFloat(builderList.get(12).toString());
                        float disChargingCurrent = Float.parseFloat(builderList.get(11).toString());
                        float solarCapicity = Float.parseFloat(builderList.get(14).toString());
                        float batteryChargingCurrent = 0;
                        String batteryvolt = ((!builderList.isEmpty()) ? (builderList.get(3).toString() + "V") : "0 V");
                        String chargingStatus = "null";
                        String currentLable = "Current";

                        if ((MAINSSTATUS) & (SOLARSTATUS)) {
                            currentLable = getString(R.string.charging_current);
                            if ((charged & 128) == 128) {
                                chargingStatus = "Full Charged";
                                batteryChargingCurrent = gridChargingCurrent;

                            } else {
                                if (gridChargingCurrent >= 10.0) {
                                    chargingStatus = "Charging From Grid+Solar";
                                    batteryChargingCurrent = gridChargingCurrent + solarChargingcurrent;
                                } else if (solarChargingcurrent > 1.0) {
                                    chargingStatus = "Charging From Solar";
                                    batteryChargingCurrent = solarChargingcurrent;
                                }
                                 else {
                                     chargingStatus="Idle";
                                     batteryChargingCurrent=gridChargingCurrent;
                                 }
                            }

                        } else if ((MAINSSTATUS) & (!SOLARSTATUS)) {
                            currentLable = getString(R.string.charging_current);
                            batteryChargingCurrent = gridChargingCurrent;

                            if ((charged & 128) == 128) {
                                chargingStatus = "Full Charged";

                            } else {
                                if (gridChargingCurrent > 0.2) {
                                    chargingStatus = "Charging From Grid";

                                } else {
                                    chargingStatus = "Idle";
                                }

                            }

                        } else if (SOLARSTATUS) {
                            if ((charged & 128) == 128) {
                                chargingStatus = "Full Charged";
                                currentLable = getString(R.string.charging_current);
                                batteryChargingCurrent = solarChargingcurrent;
                            } else {
                                if (disChargingCurrent > 0.2) {
                                    chargingStatus = "Discharging";
                                    currentLable = getString(R.string.discharging);
                                    batteryChargingCurrent = disChargingCurrent;

                                } else if (solarChargingcurrent > 0.2) {
                                    chargingStatus = "Charging From Solar";
                                    currentLable = getString(R.string.charging_current);
                                    batteryChargingCurrent = solarChargingcurrent;

                                }
                                else {
                                    chargingStatus=getString(R.string.idle);
                                    currentLable=getString(R.string.charging_current);
                                    batteryChargingCurrent = solarChargingcurrent;

                                }

                            }

                        } else {
                            if ((charged & 128) == 128) {
                                chargingStatus = "Full Charged";
                                currentLable = getString(R.string.charging_current);
                                batteryChargingCurrent = gridChargingCurrent;
                            } else {
                                if (UPSSTATUS) {
                                    chargingStatus = "Discharging";
                                    currentLable = getString(R.string.discharging);
                                    batteryChargingCurrent = disChargingCurrent;
                                } else {
                                    chargingStatus = "Idle";
                                    currentLable = getString(R.string.charging_current);
                                    batteryChargingCurrent = gridChargingCurrent;
                                }
                            }
                        }
                        clickDialog.batteryDialog(batteryvolt, batteryChargingCurrent, chargingStatus, currentLable);
                    }
                }
            });
            homeLoad.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (builderList.isEmpty()) {
                        clickDialog.lodDiaog("0%", "--", "0V");
                    }
                    else {
                        int loadINT = Integer.parseInt(builderList.get(4).toString());

                        String load = "null";

                        String loadRunon = "null";

                        if (((MAINSSTATUS) & (!SOLARSTATUS)) | ((MAINSSTATUS) & (SOLARSTATUS))) {
                            load = "Not Available During Grid";
                            loadRunon = "Grid";

                        } else if (SOLARSTATUS) {
                            if ((UPSSTATUS) & (loadINT > 5)) {
                                float disChargingCurrent = Float.parseFloat(builderList.get(11).toString());
                                float solarCapicity = Float.parseFloat(builderList.get(14).toString());
                                if (disChargingCurrent > 0.2) {
                                    loadRunon = "Solar+Battery";
                                    load = ((!builderList.isEmpty()) ? (builderList.get(4).toString() + "%") : "0 %");
                                } else {
                                    loadRunon = "Solar";
                                    load = ((!builderList.isEmpty()) ? (builderList.get(4).toString() + "%") : "0 %");
                                }
                            } else {
                                loadRunon = "No load";
                                load = "0 %";
                            }
                        } else {
                            if ((UPSSTATUS) & (loadINT > 5)) {
                                loadRunon = "Battery";
                                load = ((!builderList.isEmpty()) ? (builderList.get(4).toString() + "%") : "0 %");
                            } else {
                                loadRunon = "No load";
                                load = "0 %";
                            }
                        }


                        String opVolt = ((!builderList.isEmpty()) ? (builderList.get(5).toString() + "V") : "0 V");
                        clickDialog.lodDiaog(load, loadRunon, opVolt);
                    }
                }
            });
        }


    void indicate() {
        BleManager.getInstance().indicate(
                bleDevice,
                service.getUuid().toString(),
                characteristicsList.get(0).getUuid().toString(),
                new BleIndicateCallback() {
                    @Override
                    public void onIndicateSuccess() {

                    }

                    @Override
                    public void onIndicateFailure(BleException exception) {
                    }

                    @Override
                    public void onCharacteristicChanged(final byte[] data) {
                        runOnUiThread(() -> {
                            String ipData = Arrays.toString(HexUtil.formatHexString(data).split("/"));
                            Log.d(Tag+"OP",ipData);
                            if (ipData!=null) {
                                String [] data1 =ipData.split("/");
                                // first convert it the used it
                                convertHaxToASCII(data1);
                                builderList.clear();
                                setButtonText();
                                setText();
                                alarms.checkAlert(builderList.get(9).toString(), DetailBLE.this);
                            }

                            if (!builderList.isEmpty())
                            {
                                setTitle(builderList.get(1).toString());
                                setArrowsStatus();
                                setBatteryImage();
                            }

                        });
                    }
                });
    }
    void stopIndicate(){
        BleManager.getInstance().stopIndicate(
                bleDevice,
                service.getUuid().toString(),
                characteristicsList.get(6).getUuid().toString());
    }



    void convertHaxToASCII(String[] data){  // first convert it then chhange it
        builderList.clear();
        if (data.length>0.2) {
            for (String datum : data) {
                if (datum.length() % 2 != 0) {
                    Toast.makeText(this, "Invalid HaxCode",
                            Toast.LENGTH_SHORT).show();

                }

                StringBuilder builder = new StringBuilder();

                for (int i = 0; i < datum.length(); i = i + 2) {
                    String s = datum.substring(i, i + 2);
                    int n = Integer.valueOf(s, 16);
                    builder.append((char) n);
                }

                Log.d(Tag + "Builder", builder.toString());
                builderList.add(builder);



            }
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.