首页 > 解决方案 > 如何保存来自 JSON Url 的数据并将其传递给另一个活动?

问题描述

我需要从 json url 保存数据并将其传递给另一个活动。在 onInfoWindowClick 函数中,我需要从变量 WINERIES 中定义的 URL 传递数据。我需要将包含某个酒厂所有详细信息的活动链接到信息窗口。如果我使用 Intent 和静态对象传递数据,它可以工作,但是使用来自 json url 的数据,结果为空。我尝试了不同的方法和插件,但没有找到好的结果。我需要线程吗?有人可以帮助我吗?

public class Map extends Home implements OnMapReadyCallback {

    private DrawerLayout drawer;
    private ActionBarDrawerToggle toggle;
    private String JSON_URL = "https://www.vagabondidelgusto.com/APP-MOBILE/API/api.php?type_api=factories&idArea=1&user_agent=Android",MAP_URL="",CAT_URL= "https://www.vagabondidelgusto.com/APP-MOBILE/API/api.php?type_api=restaurants&user_agent=Android&idArea=1";
    String URL = "https://www.vagabondidelgusto.com", WINERIES = "";
    ArrayList listView;
    ArrayList<String> markerPlaces;
    Hashtable<String, Boolean> markerSet = new Hashtable<>();
    String type = "", address = "", name = "", image_prod, id="", idMap = "";
    Double longitude, latitude;
    TextView title;
    private GoogleMap mMap;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        markerPlaces = new ArrayList<>();

        listView = new ArrayList<>();
        Toolbar mToolbar = findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        title = findViewById(R.id.toolbar_title);
        title.setText(R.string.title_activity_map);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        drawer = findViewById(R.id.drawer_map);
        toggle = new ActionBarDrawerToggle(this, drawer, R.string.Open, R.string.Close);
        toggle.setDrawerIndicatorEnabled(true);
        toggle.syncState();
        drawer.addDrawerListener(toggle);
        bottomNavBar();
        lateralMenu();
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        StringRequest stringRequest = new StringRequest(Request.Method.GET, JSON_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject obj = new JSONObject(response);
                            JSONArray listArray = obj.getJSONArray("factories");
                            for (int i = 0; i < listArray.length(); i++) {
                                JSONObject c = listArray.getJSONObject(i);
                                type = c.getString("TypeFactory");
                                id = c.getString("Id");
                                address = c.getString("Address");
                                name = c.getString("Name");
                                image_prod = c.getString("Logo");
                                float zoomLevel = 8.0f;

                                if(!c.getString("Longitude").isEmpty() && !c.getString("Latitude").isEmpty()) {
                                    longitude = Double.valueOf(c.getString("Longitude"));
                                    latitude = Double.valueOf(c.getString("Latitude"));
                                    if (type.equals("winery")) {

                                        LatLng winery = new LatLng(latitude, longitude);

                                        Marker marker = mMap.addMarker(
                                                new MarkerOptions()
                                                        .position(winery)
                                                        .title(id+"X"+name)
                                                        .snippet(address+"X"+URL+image_prod)
                                                        .icon(bitmapDescriptorFromVector(Map.this)));
                                        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(winery, zoomLevel));

                                        markerSet.put(marker.getId(), false);

                                        mMap.setInfoWindowAdapter(new CustomWindowInfoAdapter(Map.this, markerSet));
                                        mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
                                            @Override
                                            public void onInfoWindowClick(Marker marker) {
                                                int iend = marker.getTitle().indexOf("X");
                                                if(iend != -1) {
                                                    idMap =  marker.getTitle().substring(0, iend);
                                                    WINERIES = "https://www.vagabondidelgusto.com/APP-MOBILE/API/api.php?type_api=factory&idFactory="+idMap;
                                                }

                                                RequestTickle mRequestTickle = VolleyTickle.newRequestTickle(getApplicationContext());

                                                StringRequest stringRequest = new StringRequest(Request.Method.GET, WINERIES, null, null);
                                                mRequestTickle.add(stringRequest);
                                                NetworkResponse response = mRequestTickle.start();

                                                if (response.statusCode == 200) {
                                                    String data = VolleyTickle.parseResponse(response);
                                                    Log.d("lebasi",data);

                                                }
                                                else{
                                                }

                                            }
                                        });

                        

                            }


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });


        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);

    }

标签: javaandroid

解决方案


推荐阅读