Загрузить JSON из php в строки во фрагменте?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Загрузить JSON из php в строки во фрагменте?

Сообщение Anonymous »


Объект: Получите один набор координат долготы и широты из результатов URL-адреса в формате JSON. Загрузите карты и добавьте к этим координатам маркер и масштаб камеры.

Проблема: Все работает, только при первой загрузке приложения и фрагмента, в котором есть карта. Когда вы нажимаете на другую кнопку навигации, а затем нажимаете кнопку, чтобы вернуться к фрагменту с картой на нем, или если вы нажимаете кнопку навигации для фрагмента карты, а затем нажимаете на нее еще раз, карта только загружается со значениями непосредственно в OnMapReady. Затем вам придется закрыть приложение и снова открыть его, чтобы этот фрагмент загрузился правильно.

Имеем во фрагменте следующее: Textview и карта.

Мы закомментировали все в OnMapReady, чтобы гарантировать получение правильных данных.

Шаги, которые мы предприняли для проверки данных:
[*]Открыть приложение [*]Нажмите кнопку «Навигация», чтобы открыть фрагмент с картой. [*]Проверил textview, чтобы убедиться, что он извлекает правильные данные из URL. [*]Открыл phpmyadmin, изменил данные. [*]Нажата кнопка, чтобы загрузить другой фрагмент. [*]Нажата кнопка, чтобы загрузить фрагмент с картой. Результаты: Textview заполнен правильными данными.
Следующим тестом было выяснить, будут ли загружаться карты и получаем ли мы данные для маркеров.

Мы добавили всю информацию о карте обратно в OnMapReady. Мы временно использовали жестко запрограммированные долготу и широту для маркера и масштабирования камеры. Затем мы добавили всплывающее уведомление для отображения textview.gettext.tostring(). РЕЗУЛЬТАТЫ: данные первого запуска или загрузки присутствуют и верны. Каждая последующая загрузка имеет значение null/пусто и отображает пустое всплывающее сообщение.

Ниже приведен код, который мы используем для вызова фрагмента с картой на нем в MainActivity:

getSupportFragmentManager() .beginTransaction() .setCustomAnimations(R.anim.bottom_nav_enter, R.anim.bottom_nav_exit) .add(R.id.container, frg) //.replace(R.id.container, frg) //.attach(фрг) .commitNow(); Я пробовал отсоединить/присоединить/удалить/добавить/заменить, но безрезультатно.

Ниже приведен полный код моего фрагмента, содержащего карту.

пакет com.app.restaurant.bowzers.fragments; импортировать android.app.Activity; импортировать android.content.Context; импортировать android.os.AsyncTask; импортировать android.os.Bundle; импортировать androidx.annotation.NonNull; импортировать androidx.annotation.Nullable; импортировать androidx.fragment.app.Fragment; импортировать android.util.Log; импортировать android.view.LayoutInflater; импортировать android.view.View; импортировать android.view.ViewGroup; импортировать android.widget.TextView; импортировать android.widget.Toast; импортировать com.app.restaurant.bowzers.GetJSON; импортировать com.app.restaurant.bowzers.R; импортировать com.google.android.gms.maps.CameraUpdateFactory; импортировать com.google.android.gms.maps.GoogleMap; импортировать com.google.android.gms.maps.MapView; импортировать com.google.android.gms.maps.OnMapReadyCallback; импортировать com.google.android.gms.maps.model.CameraPosition; импортировать com.google.android.gms.maps.model.LatLng; импортировать com.google.android.gms.maps.model.MarkerOptions; импортировать org.json.JSONArray; импортировать org.json.JSONObject; импортировать java.io.BufferedReader; импортировать java.io.InputStreamReader; импортировать java.net.HttpURLConnection; импортировать java.net.URL; публичный класс TruckFragment расширяет Fragment реализует OnMapReadyCallback { Активность общедоступный статический TextView textviewlocation; GoogleMap mGoogleMap; Строка strlong, strlat; Строка долготыстрока; Строка широты, mySB; MapView mMapView; Посмотреть mView; двойное расположение в длину, расположение вширь; общественный TruckFragment() { // Требуемый пустой публичный конструктор } @Override public void onAttach (Контекстный контекст) { super.onAttach(контекст); mactivity = getActivity(); } @Override public void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); } @Override public View onCreateView(@NonNull LayoutInflater инфлятор, контейнер ViewGroup, Пакет saveInstanceState) { mView = inflater.inflate(R.layout.fragment_truck, контейнер, false); if(this.getArguments()!=null) { Log.d("эй", "эй"); String[] longlat =textviewlocation.getText().toString().split(","); locationlong = Double.parseDouble(longlat [0]); locationlat = Double.parseDouble(longlat [1]); } вернуть mView; } Текстовое представление @Override public void onViewCreated(@NonNull View view, @Nullable Bundle saveInstanceState) { super.onViewCreated(просмотр, saveInstanceState); textviewlocation = view.findViewById(R.id.textviewlocation); getJSON("https://bowzershotdogstand.com/app/get_location.php"); // String[] longlat =textviewlocation.getText().toString().split(","); // locationlong = Double.parseDouble(longlat [0]); // locationlat = Double.parseDouble(longlat [1]); mMapView = mView.findViewById(R.id.truckmap); если (mMapView!= ноль) { mMapView.onCreate(ноль); mMapView.onResume(); mMapView.getMapAsync(это); } } частная пустота getJSON (окончательная строка urlWebService) { класс GetJSON расширяет AsyncTask { защищенный недействительный onPreExecute () { супер.onPreExecute(); } protected void onPostExecute (String s) { супер.onPostExecute(s); мойSB = с; textviewlocation.setText(mySB); } защищенная строка doInBackground(Void... Пустоты) { пытаться { URL URL = новый URL (urlWebService); HttpURLConnection con = (HttpURLConnection) url.openConnection(); StringBuilder sb = новый StringBuilder(); BufferedReader bufferedReader = новый BufferedReader (новый InputStreamReader (con.getInputStream ())); Строка JSON; while ((json =ufferedReader.readLine()) != null) { sb.append((json + "\n")); } mySB = String.valueOf(sb); JSONArray JA = новый JSONArray(mySB); for(int i =0;i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»