在 Fragment Android Studio 中为解析器 JSON 创建类
Posted
技术标签:
【中文标题】在 Fragment Android Studio 中为解析器 JSON 创建类【英文标题】:Create class for parser JSON in Fragment Android Studio 【发布时间】:2017-09-01 21:48:00 【问题描述】:我为 Google Maps API 编写了以下代码。我正在向我的地图添加标记,但是每次我在导航活动中点击“地图”时,所有标记都会消失。除此之外,我还有一个 RecylerView,当我在 onCreate 方法中使用它时,它不会从我的 API 中获取数据。
package com.example.sander.app;
import android.app.Fragment;
/**
* Created by Sander on 4-4-2017.
*/
import android.app.Fragment;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.Manifest;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class GoogleMaps extends Fragment implements OnMapReadyCallback
ArrayList<String> list = new ArrayList<>();
ArrayList<Double> latitude = new ArrayList<>();
ArrayList<Double> longitude = new ArrayList<>();
public GoogleMaps()
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
return inflater.inflate(R.layout.fragment_gmaps, container, false);
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
RequestQueue rq = Volley.newRequestQueue(getActivity().getApplicationContext());
String url= "http://test.dontstealmywag.ga/api/parkgarage.php";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>()
@Override
public void onResponse(String response)
// Do something with the response
try
JSONObject o = new JSONObject(response);
JSONArray values=o.getJSONArray("parkgarage");
for ( int i=0; i< values.length(); i++)
JSONObject jsonObject = values.getJSONObject(i);
list.add(jsonObject.getString("parkgarage_name"));
longitude.add(jsonObject.getDouble("langitude"));
latitude.add(jsonObject.getDouble("longitude"));
catch (JSONException ex)
,
new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
// Handle error
);
rq.add(stringRequest);
super.onViewCreated(view, savedInstanceState);
MapView mapView = (MapView) view.findViewById(R.id.map);
mapView.onCreate(savedInstanceState);
mapView.onResume(); // needed to get the map to display immediately
try
MapsInitializer.initialize(getActivity().getApplicationContext());
catch (Exception e)
e.printStackTrace();
mapView.getMapAsync(this);
@Override
public void onMapReady(GoogleMap googleMap)
LatLng marker = new LatLng(51.9244201, 4.4777325);
for(Integer i = 0; i < list.size(); i++)
googleMap.addMarker(new MarkerOptions().title(list.get(i)).position(new LatLng(longitude.get(i), latitude.get(i))));
googleMap.addMarker(new MarkerOptions().title("Testing").position(marker));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 12));
//googleMap.addMarker(new MarkerOptions().title(list.get(1)).position(marker));
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
return;
googleMap.setMyLocationEnabled(true);
googleMap.getUiSettings().setCompassEnabled(true);
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
@Override
public void onActivityCreated(Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
我认为问题出在我的 JSON 解析器代码中。我想把它放在一个单独的班级。谁能帮我解决这个问题?
【问题讨论】:
【参考方案1】:试试JsonUtils,可以解析大部分数据类型。
【讨论】:
以上是关于在 Fragment Android Studio 中为解析器 JSON 创建类的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio:如何从 Fragment 在 ActionBar 中实现后退按钮
求教android studio大神:用fragment写一个导航栏,在每个fragment里面加listview,能实现点击事件
ANDROID STUDIO 无法访问 fragment_main.xml 中的对象
Android Studio--ViewPager的使用(未使用fragment)