《安卓第一行代码》——coolweather,照着代码敲加载失败(打开白屏)的原因

在这里插入图片描述
百度了好多都说是接口不行了什么的,还自己去和风天气拿json数据自己解析,发现那岂不是后面的代码都不能照着敲了?要改的地方好多,万幸debug的时候找到了问题的真正所在。

Android P http网络请求的问题

Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响。

因此在Android P 使用HttpUrlConnection进行http请求会出现以下异常

作者:yonbor605
来源:CSDN
原文:https://blog.csdn.net/yonbor605/article/details/82223882
版权声明:本文为博主原创文章,转载请附上博文链接!

所以是因为访问guolin大神的服务器的时候用的http协议而不是https,安卓现在的版本已经不允许了。
如何修改也在上面的文章里了,我用的第三种。

以下是一个简单的实现 Android ViewPager 轮播图禁止预加载且切换页面时不出现相邻页面白屏的示例代码: ```java public class BannerActivity extends AppCompatActivity { private ViewPager mViewPager; private BannerAdapter mAdapter; private List<BannerItem> mDataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_banner); initData(); initView(); } private void initView() { mViewPager = findViewById(R.id.view_pager); mAdapter = new BannerAdapter(getSupportFragmentManager(), mDataList); mViewPager.setAdapter(mAdapter); mViewPager.setOffscreenPageLimit(1); mViewPager.setCurrentItem(mDataList.size() * 1000); // 添加页面切换监听器,禁止预加载 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mAdapter.addExtraPages(position); } @Override public void onPageScrollStateChanged(int state) { } }); } private void initData() { mDataList = new ArrayList<>(); mDataList.add(new BannerItem(R.drawable.banner_1, "Banner 1")); mDataList.add(new BannerItem(R.drawable.banner_2, "Banner 2")); mDataList.add(new BannerItem(R.drawable.banner_3, "Banner 3")); mDataList.add(new BannerItem(R.drawable.banner_4, "Banner 4")); mDataList.add(new BannerItem(R.drawable.banner_5, "Banner 5")); } private static class BannerAdapter extends FragmentPagerAdapter { private List<BannerItem> mDataList; private SparseArray<Fragment> mExtraPages = new SparseArray<>(); BannerAdapter(FragmentManager fm, List<BannerItem> dataList) { super(fm); mDataList = dataList; } @Override public int getCount() { return mDataList.size() * 10000; } @Override public Fragment getItem(int position) { int index = position % mDataList.size(); return BannerFragment.newInstance(mDataList.get(index)); } public void addExtraPages(int position) { int index = position % mDataList.size(); if (mExtraPages.get(index) == null) { mExtraPages.put(index, BannerFragment.newInstance(mDataList.get(index))); } int left = index > 0 ? index - 1 : mDataList.size() - 1; if (mExtraPages.get(left) == null) { mExtraPages.put(left, BannerFragment.newInstance(mDataList.get(left))); } int right = index < mDataList.size() - 1 ? index + 1 : 0; if (mExtraPages.get(right) == null) { mExtraPages.put(right, BannerFragment.newInstance(mDataList.get(right))); } } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { Fragment fragment = (Fragment) super.instantiateItem(container, position); mExtraPages.put(position % mDataList.size(), fragment); return fragment; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { mExtraPages.remove(position % mDataList.size()); super.destroyItem(container, position, object); } } public static class BannerFragment extends Fragment { private BannerItem mItem; public static BannerFragment newInstance(BannerItem item) { BannerFragment fragment = new BannerFragment(); Bundle args = new Bundle(); args.putParcelable("item", item); fragment.setArguments(args); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mItem = getArguments().getParcelable("item"); } } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_banner, container, false); ImageView imageView = view.findViewById(R.id.image_view); TextView textView = view.findViewById(R.id.text_view); imageView.setImageResource(mItem.getImageResId()); textView.setText(mItem.getTitle()); return view; } } public static class BannerItem implements Parcelable { private int imageResId; private String title; public BannerItem(int imageResId, String title) { this.imageResId = imageResId; this.title = title; } protected BannerItem(Parcel in) { imageResId = in.readInt(); title = in.readString(); } public static final Creator<BannerItem> CREATOR = new Creator<BannerItem>() { @Override public BannerItem createFromParcel(Parcel in) { return new BannerItem(in); } @Override public BannerItem[] newArray(int size) { return new BannerItem[size]; } }; public int getImageResId() { return imageResId; } public String getTitle() { return title; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(imageResId); dest.writeString(title); } } } ``` 在上面的代码中,我们禁止了 ViewPager 的预加载,并手动添加了相邻页面。具体实现细节可以参考代码注释。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值