我在带有 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 :不要与作为参数在OnCreate
、onViewCreated
、onStateRestored
和onSaveState
生命周期片段方法中发送的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:”