Вывод JSON не отображается в logcat - PullRequest
0 голосов
/ 11 мая 2018

Я изучал андроид студию через онлайн-курс, и у меня возникла проблема.Я создаю приложение погоды, используя зависимость от асинхронного Http-клиента Джеймса Смита для Android, и я не могу получить обновление местоположения.Я получаю только методы onResume () и onPaused (), вызываемые в logcat.Я также использовал грубое местоположение с провайдером GPS и сетевым провайдером, а также точное местоположение с провайдером GPS и сетевым провайдером.Мой наставник предложил использовать Network провайдера и найти последнее место, чтобы все заработало, и это сработало, но когда на следующий день я скомпилировал точно такой же код, это не сработало.Я упомянул разрешение в файле манифеста для Интернета и точного расположения Access.На моем мобильном телефоне (OnePlus 3) также включено местоположение и Интернет, и разрешение с мобильного телефона уже предоставлено.Кроме того, Android Studio дает мне ошибку, касающуюся части [Location lastLocation = mlocationManager.getLastKnownLocation (LOCATION_PROVIDER)].Кроме того, я довольно новичок в кодировании, поэтому, если кто-нибудь сможет объяснить мне это простыми словами, я буду очень признателен.

Это код.

public class WeatherController extends AppCompatActivity {

        // Constants:
        final int REQUEST_CODE = 123;
        final String WEATHER_URL = "http://api.openweathermap.org/data/2.5/weather";

        // App ID to use OpenWeather data
        final String APP_ID = "a_______________96";
        // Time between location updates (5000 milliseconds or 5 seconds)
        final long MIN_TIME = 5000;
        // Distance between location updates (1000m or 1km)
        final float MIN_DISTANCE = 1000;

        // TODO: Set LOCATION_PROVIDER here:

        String LOCATION_PROVIDER = LocationManager.NETWORK_PROVIDER;


        // Member Variables:
        TextView mCityLabel;
        ImageView mWeatherImage;
        TextView mTemperatureLabel;

        // TODO: Declare a LocationManager and a LocationListener here:

        LocationManager mLocationManager;
        LocationListener mLocationListener;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.weather_controller_layout);

            // Linking the elements in the layout to Java code
            mCityLabel = (TextView) findViewById(R.id.locationTV);
            mWeatherImage = (ImageView) findViewById(R.id.weatherSymbolIV);
            mTemperatureLabel = (TextView) findViewById(R.id.tempTV);
            ImageButton changeCityButton = (ImageButton) findViewById(R.id.changeCityButton);


            // TODO: Add an OnClickListener to the changeCityButton here:

        }


        // TODO: Add onResume() here:

        @Override
        protected void onResume() {
            super.onResume();
            Log.d("Clima", "onResume() called");
            Log.d("Clima", "Getting weather for current location");
            getWeatherForCurrentLocation();
        }


        // TODO: Add getWeatherForNewCity(String city) here:


        // TODO: Add getWeatherForCurrentLocation() here:

        private void getWeatherForCurrentLocation() {
            mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

            mLocationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    Location lastLocation = mLocationManager.getLastKnownLocation(LOCATION_SERVICE);
                    Log.d("Clima", "onLocationChanged() callback received");
                    String longitude = String.valueOf(location.getLongitude());
                    String latitude = String.valueOf(location.getLatitude());

                    Log.d("Clima", "Longitude is: " + longitude);
                    Log.d("Clima", "Latitude is: " + latitude);

                    RequestParams params = new RequestParams();
                    params.put("lat", latitude);
                    params.put("lon", longitude);
                    params.put("appid", APP_ID);
                    letsDoSomeNetworking(params);

                }

                @Override
                public void onStatusChanged(String s, int i, Bundle bundle) {
                    Log.d("Clima","onStatusChanged() called");
                }

                @Override
                public void onProviderEnabled(String s) {
                    Log.d("Clima", "onProviderEnabled() called");
                }

                @Override
                public void onProviderDisabled(String s) {
                    Log.d("Clima", "onProviderDisabled() callback received");

                }
            };
            if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    Activity#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for Activity#requestPermissions for more details.
                ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE);

                return;
            }

            mLocationManager.requestLocationUpdates(LOCATION_PROVIDER, MIN_TIME, MIN_DISTANCE, mLocationListener);
        }

        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if(requestCode == REQUEST_CODE) {
                if(grantResults.length > 0 && grantResults[0] ==  PackageManager.PERMISSION_GRANTED)
                {
                    Log.d("Clima", "onRequestPermissionsResult() permission granted!");
                    getWeatherForCurrentLocation();
                } else {
                    Log.d("Clima", "onRequestPermissionsResult() permission denied!");
                }
            }
        }

        // TODO: Add letsDoSomeNetworking(RequestParams params) here:

        private void letsDoSomeNetworking(RequestParams params) {
            AsyncHttpClient client = new AsyncHttpClient();

            client.get(WEATHER_URL, params , new JsonHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                Log.d("Clima","Success! JSON: " + response.toString());
                }
                @Override
                public void onFailure(int statusCode,  Header[] headers, Throwable e , JSONObject response) {
                    Log.e("Clima", "Fail" + e.toString());
                    Log.d("Clima", "StatusCode: " + statusCode);
                    Toast.makeText(WeatherController.this, "Request failed", Toast.LENGTH_SHORT).show();
                }
            });

        }

        // TODO: Add updateUI() here:



        // TODO: Add onPause() here:
        @Override
        protected void onPause(){
            super.onPause();
            Log.d("Clima", "onPause() callback received ");
            Log.d("Clima","Weather data gathering stopped.");
        }
    }

1 Ответ

0 голосов
/ 11 мая 2018
  1. Вы устанавливаете минимальное расстояние до 1000 м, возможно, устанавливаете меньшее значение и пытаетесь пройтись по счетчикам, чтобы onLocationChanged () могла получить обратный вызов.Перезагрузка приложения также должна работать.
  2. Не забудьте отменить регистрацию при использовании системной службы, такой как LocationManager, или это может привести к утечке памяти.
  3. Вы можете запросить обновление onCreate ()
...