При отправке данных на сервер eclipse, как вы отправляете данные нескольких маяков одновременно? - PullRequest
0 голосов
/ 20 июня 2020

Я обнаружил проблему с отправкой данных маяка на сервер и последующим сохранением их в базе данных. Он получает 4 данных маяка в базу данных (по одному за раз в операторе SQL). Здесь один фрагмент данных - это связка из beacon.getbluetoothname, beacon.getrssi и beacon.getdistance. Я использую библиотеку маяков android.

Моя первоначальная цель - быстрее отправлять данные маяков на сервер. И моя основная проблема - это отправка дубликатов данных в БД. Я хочу равномерно отправлять данные с четырех маяков. если вы поместите данные в sndmsg (), они будут отправлены на сервер. server - это сервер eclipse. а DB - mysql. (mariaDB)

Я знаю, что избыточные данные происходят из-за низкой скорости передачи. я хочу улучшить скорость. это предел библиотеки или маяка (плутокона) Есть ли способ решить проблему?

введите здесь описание изображения

public class MainActivity extends AppCompatActivity implements          
    BeaconConsumer
{
    private String TAG = MainActivity.class.getSimpleName();
    private BeaconManager beaconManager;
    private List<Beacon> beaconList = new ArrayList<>();
    TextView textView ;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SystemRequirementsChecker.checkWithDefaultDialogs(this);
    beaconManager = BeaconManager.getInstanceForApplication(this);
    textView = (TextView)findViewById(R.id.tvId);
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
    beaconManager.bind(this);
    mHandler = new Handler();
    et =  findViewById(R.id.EditText01);
    Button btn =  findViewById(R.id.Button01);
    final TextView tv =  findViewById(R.id.TextView01);
    msgTV = findViewById(R.id.chatTV);
    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (et.getText().toString() != null || !et.getText().toString().equals("")) {
                ConnectThread th =new ConnectThread();
                th.start();
            }
        }
    });
}

@Override
protected void onDestroy() {
    super.onDestroy();
    beaconManager.unbind(this);
}

@Override
public void onBeaconServiceConnect() {
    beaconManager.addMonitorNotifier(new MonitorNotifier() {
        @Override
        public void didEnterRegion(Region region) {
        }
        @Override
        public void didExitRegion(Region region) {
            Log.d(TAG,"Exit : " + region.getId1());
        }
        @Override
        public void didDetermineStateForRegion(int i, Region region) {
        }
    });

    beaconManager.addRangeNotifier(new RangeNotifier() {
        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
            if (beacons.size() > 0) {
                beaconList.clear();
                for (Beacon beacon : beacons) {
                    beaconList.add(beacon);
                }
            }
        }
    });
    try {
        beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
    }
    catch (RemoteException e) {

    }
}

public void OnButtonClicked(View view){
    handler.sendEmptyMessage(0);
}
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            for(Beacon beacon : beaconList)
            {

                textView.setText("ID : " + beacon.getBluetoothName() + " / " + "Distance : "
                        + beacon.getDistance()+ "m\n" + " rssi:"
                        + beacon.getRssi() + "txpower : " + beacon.getTxPower()  );

            }
            handler.sendEmptyMessageDelayed(0, 30);
        }
    };

private Handler mHandler;
Socket socket;
private String ip = "192.168.0.3"; // IP 주소
private int port = 7000; // PORT번호
EditText et;
TextView msgTV;

@Override
protected void onStop() {
    super.onStop();
    try {
        socket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}



class ConnectThread extends Thread{
    @SuppressLint("DefaultLocale")
    public void run(){
        try{
            while (true) {
                InetAddress serverAddr = InetAddress.getByName(ip);
                socket = new Socket(serverAddr, port);
                //입력 메시지
                String sndMsg = null;
                //String ClientID = et.getText().toString();
                for (Beacon beacon : beaconList) {
                    String rssi = Integer.toString(beacon.getRssi());
                    String dis1 = String.format("%.3f", beacon.getDistance());
                    double dis = 0.0;
                    double ratio = Double.valueOf(rssi) * (1.0) / beacon.getTxPower();

                    if (ratio < 1.0) {
                        dis = Math.pow(ratio, 10);
                    } else {
                        dis = (0.89976) * Math.pow(ratio, 7.7095) + 0.111;
                    }

                    //ClientID = et.getText().toString();
                    sndMsg = (et.getText().toString() + "," + beacon.getBluetoothName() + "," + rssi + "," + dis);

                    //데이터 송신
                    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                    out.println(sndMsg);

                    //데이터 수신
                    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String read = input.readLine();
                    //화면 출력
                    mHandler.post(new msgUpdate(read));
                    try {
                        sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    Log.d("=============", read);
                }

                socket.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

// 받은 메시지 출력하는 클래스
class msgUpdate implements Runnable {
    private String msg;
    public msgUpdate(String str) {
        this.msg = str;
    }
    public void run() {
        msgTV.setText(msg);
    }
}

}

...