在 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)

Android Studio 和 android.support.v4.app.Fragment:无法解析符号

Android Studio 第六十六期 - Android业务模块化Fragment结合