마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서버에서 상대방 위치를 받아서 gps 띄우는 법

0 추천
//내 현재 위치 가져오기(10초마다 갱신)
private void requestMyLocation() {
        locationmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        try {
            long minTime = 10000;
            float minDistance = 1;

            locationmanager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER,
                    minTime,
                    minDistance,
                    new LocationListener() {
                        @Override
                        public void onLocationChanged(Location location) {
                            try {
                                showCurrentLocation(location);


                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                            try {
                                addPictures(location);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }

                        @Override
                        public void onStatusChanged(String provider, int status, Bundle extras) {

                        }

                        @Override
                        public void onProviderEnabled(String provider) {

                        }

                        @Override
                        public void onProviderDisabled(String provider) {

                            Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                            startActivity(i);
                        }

                    }
            );

            Location lastLocation = locationmanager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if (lastLocation != null) {
                showCurrentLocation(lastLocation);
            }

            locationmanager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER,
                    10000,
                    1,
                    new LocationListener() {
                        @Override
                        public void onLocationChanged(Location location) {
                            try {
                                showCurrentLocation(location);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                            try {
                                addPictures(location);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }

                        @Override
                        public void onStatusChanged(String provider, int status, Bundle extras) {

                        }

                        @Override
                        public void onProviderEnabled(String provider) {

                        }

                        @Override
                        public void onProviderDisabled(String provider) {

                        }
                    }

            );


        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
//내 현재 위치 띄우기
    private void showCurrentLocation(Location location) throws JSONException {
        LatLng curPoint = new LatLng(location.getLatitude(), location.getLongitude());

        map.animateCamera(CameraUpdateFactory.newLatLngZoom(curPoint, 15));

        showMyLocationMarker(location);
        addPictures(location);
    }

    private void showMyLocationMarker(Location location) {
        if (myLocationMarker == null) {
            myLocationMarker = new MarkerOptions();
            myLocationMarker.position(new LatLng(location.getLatitude(), location.getLongitude()));
            myLocationMarker.title("내위치");
            myLocationMarker.snippet("내위치");
            myLocationMarker.icon(BitmapDescriptorFactory.fromResource(R.mipmap.dial));
            map.addMarker(myLocationMarker);
        } else {
            myLocationMarker.position(new LatLng(location.getLatitude(), location.getLongitude()));
        }
        latitude = location.getLatitude();
        longitude = location.getLongitude();
    }

    private void addPictures(final Location location) throws JSONException {
        int pictureResId = R.mipmap.ic_start;


            JSONObject jsonObject = new JSONObject(mJsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(TAG_JSON);

            for (int i = 0; i < jsonArray.length(); i++) {

                JSONObject item = jsonArray.getJSONObject(i);
                String schedule_id = "3";
                String id = "ys";
                String name = "yeseul";
//상대방 위치 띄우는 코드
                for(int j = 0; j <= 1; j++)
                {
                     friendMarker[j] = new MarkerOptions();
                        friendMarker[j].icon(BitmapDescriptorFactory.fromResource(pictureResId));
                        friendMarker[j].position(new LatLng(Double.valueOf(longitude1[j]), Double.valueOf(latitude1[j])));
                       friendMarker[j].icon(BitmapDescriptorFactory.fromResource(pictureResId));
                        map.addMarker(friendMarker[j]);
               }

내 위치를 서버에서 받아서 지도에 띄우는 것 까지는 했는데

서버에 저장한 위도 경도를 받아서 상대방 위치를 띄우려 하는데

이부분에서 해결이 잘 안됩니다......

이것만 완성하면 되는데 해결이 안되어서 며칠째 힘드네요

도와주십쇼 고수님들...

익명사용자 님이 2017년 8월 22일 질문

1개의 답변

0 추천

코드를 보면 longitude1가 전역 Array로  추측되는데 이 변수에 대한 정보도 없고,
JSON 구조도 나와있지 않을 뿐더러 클래스에 대한 정보도 확실하지 않아서 어떤 문제가 있는지 알기 힘듭니다.

올려주신 소스만으로는 Marker의 icon과 location을 추가한 후에

map.addMarker(MarkerOptions)를 하면 마커가 추가되는 개념인 것 같다는 추측정도만 가능한 것 같습니다.

minor (13,710 포인트) 님이 2017년 8월 22일 답변
<?php

$link=mysqli_connect("localhost","root","rhxnrpej", "register" );
if (!$link)
{
    echo "MySQL 접속 에러 : ";
    echo mysqli_connect_error();
    exit();
}

mysqli_set_charset($link,"utf8");


$sql="select * from userGps";

$result=mysqli_query($link,$sql);
$data = array();
if($result){

    while($row=mysqli_fetch_array($result)){
        array_push($data,
            array('schedule_id'=>$row[0],
            'id'=>$row[1],
            'name'=>$row[2],
            'longitude'=>$row[3],
            'latitude'=>$row[4]
        ));
    }

    header('Content-Type: application/json; charset=utf8');
$json = json_encode(array("gps_json"=>$data), JSON_PRETTY_PRINT+JSON_UNESCAPED_UNICODE);
echo $json;


}
else{
    echo "SQL문 처리중 에러 발생 : ";
    echo mysqli_error($link);
}

 

mysqli_close($link);

?>


이게 php 코드입니다.
//음...일단 통신 api가 어디있는지는 묻지 않겠습니다.
//수정해야할 부분
JSONObject jsonObject = new JSONObject(mJsonString);
JSONArray jsonArray = jsonObject.getJSONArray(TAG_JSON);

//수정된예
if(mJsonString != ""){
    JSONObject jsonObject = new JSONObject(mJsonString);
    JSONArray jsonArray = jsonObject.getJSONArray(TAG_JSON);
 
            for (int i = 0; i < jsonArray.length(); i++) {
 
                JSONObject item = jsonArray.getJSONObject(i);
                String schedule_id = item.getString("schedule_id");
                String id = item.getString("id");
                String name = item.getString("name");
                String longitude = item.getString("longitude");
                String latitude = item.getString("latitude");
//상대방 위치 띄우는 코드
                                     friendMarker[i] = new MarkerOptions();
                        friendMarker[i].icon(BitmapDescriptorFactory.fromResource(pictureResId));
                        friendMarker[i].position(new LatLng(Double.valueOf(longitude), Double.valueOf(latitude )));
                       friendMarker[j].icon(BitmapDescriptorFactory.fromResource(pictureResId));
                        map.addMarker(friendMarker[j]);

               }
}
//우선 알려주셔서 정말 감사합니다
//알려주신대로 수정해보니

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
                                                                                    at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
                                                                                    at org.json.JSONTokener.nextValue(JSONTokener.java:94)
                                                                                    at org.json.JSONObject.<init>(JSONObject.java:156)
                                                                                    at org.json.JSONObject.<init>(JSONObject.java:173)
                                                                                    at app.gotogether.com.mapactivity.MapsActivity.addPictures(MapsActivity.java:423)
                                                                                    at app.gotogether.com.mapactivity.MapsActivity.showCurrentLocation(MapsActivity.java:400)
                                                                                    at app.gotogether.com.mapactivity.MapsActivity.access$100(MapsActivity.java:54)
                                                                                    at app.gotogether.com.mapactivity.MapsActivity$4.onLocationChanged(MapsActivity.java:357)
                                                                                    at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:290)
                                                                                    at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:219)
                                                                                    at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:235)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                    at android.os.Looper.loop(Looper.java:158)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:7225)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

//이러한 에러가 나면서 종료가 되는데 혹시 이부분은 왜 이런지 아시나요??
item.getString("schedule_id");  => item.getInt("schedule_id",0);
item.getString("id"); => item.getInt("id",0);
item.getString("longitude"); => item.getDouble("longitude",0);
item.getString("latitude"); => item.getDouble("latitude",0);
저렇게 했는데도 안돌아가네요 ㅠㅠ 그래도 정말 감사드립니다!!
...