我在带有 Bundle 和 ArrayList 的 android studio 中出现错误

Posted

技术标签:

【中文标题】我在带有 Bundle 和 ArrayList 的 android studio 中出现错误【英文标题】:I have an error in android studio with Bundle and ArrayList 【发布时间】:2021-11-13 12:55:50 【问题描述】:

这是我在片段中的代码。

'''

捆绑 b= 新捆绑();

@Override

public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) 

    super.onViewCreated(view, savedInstanceState);

    adapter= new PlatformAdapter(data);
    recyclerView=view.findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager( new LinearLayoutManager(getContext()));
    recyclerView.setAdapter(adapter);


    RequestVolley.getInstance(getContext())
            .doGetRequest("http://www...... .json", new RequestVolley.OnCompleteCallback() 
                @Override
                public void onCompleted(String response) 

                    try 
                        JSONArray jsonArray = new JSONArray(response);
                        for(int i=0;i<jsonArray.length();i++)
                            JSONObject object= jsonArray.optJSONObject(i);
                            if(object!=null)
                                data.add(Platform.parseJSON(object));
                            
                        

                                adapter.notifyDataSetChanged();

                    catch(JSONException e)
                        e.printStackTrace();
                    
                
            );
    b.putSerializable("ListPlatforms", (Serializable) data);

然后,我尝试在另一个片段中执行此操作: '''

@Override

public void onLocationChanged(@NonNull Location location) 

    if (googleMap != null) 

        if (myMarker == null) 

            MarkerOptions options = new MarkerOptions();
            options.title("My location");
            options.position(new LatLng(location.getLatitude(), location.getLongitude()));
            myMarker = googleMap.addMarker(options);
            googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 10f));
         else 
            myMarker.setPosition(new LatLng(location.getLatitude(), location.getLongitude()));
        
    


        Bundle b=new Bundle ();
        ArrayList<Platform> platforms= (ArrayList<Platform>) b.getSerializable("ListPlatforms");

        for(Platform platform:platforms) 

            double latitudine = platform.getClatitudine__wgs84__();
            double longitudine = platform.getClongitudine__wgs_84__();

            double distance = getDistanceinKm(latitudine, longitudine, location.getLatitude(), location.getLongitude());

            if (distance >=0.0) 
                MarkerOptions options = new MarkerOptions();
                options.title(platform.getCdenominazione__());
                options.position(new LatLng(latitudine, longitudine));
                myMarker = googleMap.addMarker(options);

            
        

''' 但是我有 java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Iterator java.util.ArrayList.iterator()' on an null object reference error when I try to do"for(Platform platform:platforms)" .. 平台为空。 ..为什么??

【问题讨论】:

首先,你需要指出哪一行抛出了异常,那一行上的哪个变量为null。 当我尝试执行“for(Platform platform:platforms)”时.. 变量 null si 平台。 那是因为你正在创建一个全新的 Bundle,它对第一个片段中的另一个包一无所知,你应该在片段之间导航时传递第一个包,但我不知道你是怎么做的导航,因为您没有共享这部分代码。 我使用 Fragments 和导航图: public boolean onOptionsItemSelected(@NonNull MenuItem item) switch(item.getItemId()) case R.id.menuPosizione: NavHostFragment.findNavController (this) .navigate ( R.id.action_stationFragment_to_detailFragment2);返回真; 【参考方案1】:

由于您没有分享如何在片段之间导航,我假设您使用的是带有操作的导航图。

所以如果我们假设这是您的代码,请从片段 A 导航到 B

 NavHostFragment.findNavController(FragA.this)
                .navigate(R.id.action_FragA_FragB); //navigate from FragA to FragB action
那么您应该像这样将第一个片段中使用 b.putSerializable("ListPlatforms", (Serializable) data); 的包作为导航代码中的第二个参数传递(请注意,我现在将 b 作为方法的第二个参数包含在内):
NavHostFragment.findNavController(FragA.this)
                .navigate(R.id.action_FragA_FragB,b); //navigate from FragA to FragB action
那么在第二个片段中,您应该使用getArguments() 方法获取这个 b 包,该方法可以从片段中的任何位置调用。
Bundle FragA_b = getArguments();
ArrayList<Platform> platforms= (ArrayList<Platform>) FragA_b.getSerializable("ListPlatforms");

NB :不要与作为参数在OnCreateonViewCreatedonStateRestoredonSaveState 生命周期片段方法中发送的savedInstanceState 包混淆,这些savedInstanceState bundle 与您在导航期间发送并使用getArguments() 方法获取的包无关。

【讨论】:

好的!!!非常感谢!!!!

以上是关于我在带有 Bundle 和 ArrayList 的 android studio 中出现错误的主要内容,如果未能解决你的问题,请参考以下文章

未经检查的强制转换:'java.io.Serializable'为'java.util.ArrayList “

在 MainActivity 中存储带有附加功能的 Bundle

Symfony 4 easy admin 和 vich uploader bundle 错误

使用 Gradle 创建带有依赖 Jar 的 Osgi Bundle

iPhone:TableViewController nibName 错误,带有“initWithNibName:bundle:”

带有 maven-bundle-plugin 的 OSGI JAR 包