java - 我的应用程序运行良好,除了 android 9 版本。我不明白是什么问题
问题描述
我是 Android 的新手。我有一个应用程序,并且除了 android 9 (Pie) 之外的所有设备都运行良好。
当试图打开这个应用程序时它崩溃了。
这是我的 gradle 和代码;
public class TestiFragment extends Fragment {
private static final boolean GRID_LAYOUT = false;
RecyclerView mRecyclerView;
private RssObject rssObject;
private final String RSS_LINK = "http://www.herkul.org/category/kirik-testi/feed/";
private final String RSS_TO_JSON_API = "http://api.rss2json.com/v1/api.json?rss_url=";
private TestiAdapter adapter;
public static TestiFragment newInstance() {
return new TestiFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.testi_layout, container, false);
mRecyclerView = view.findViewById(R.id.testi_recycler);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//setup materialviewpager
if (GRID_LAYOUT) {
mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
} else {
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
}
mRecyclerView.setHasFixedSize(true);
mRecyclerView.addItemDecoration(new MaterialViewPagerHeaderDecorator());
if(Common.isConnectedtoInternet(getActivity())){
//loadRss();
}else{
Toast.makeText(getActivity(), "Lütfen İnternet Bağlantınızı Kontrol Edin!", Toast.LENGTH_SHORT).show();
}
}
private void loadRss() {
AsyncTask<String, String, String> loadRssAsync = new AsyncTask<String, String, String>() {
ProgressDialog dialog = new ProgressDialog(getActivity());
@Override
protected void onPreExecute() {
dialog.setMessage("Yükleniyor...");
dialog.show();
}
@Override
protected String doInBackground(String... params) {
String result;
HTTPDataHandler http = new HTTPDataHandler();
result = http.getHTTPData(params[0]);
return result;
}
@Override
protected void onPostExecute(String s) {
dialog.dismiss();
rssObject = new Gson().fromJson(s, RssObject.class);
adapter = new TestiAdapter(getActivity(), rssObject);
mRecyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
};
StringBuilder url_Get_Data = new StringBuilder(RSS_TO_JSON_API);
url_Get_Data.append(RSS_LINK);
loadRssAsync.execute(url_Get_Data.toString());
}
public void removeFromFavorites(String name) {
List<Item> items = this.rssObject.getItems();
for (int i = 0; i < items.size(); i++){
if (items.get(i).title.equals(name)){
this.adapter.notifyItemChanged(i);
return;
}
}
}
}
这是我的毕业典礼;
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.herkultakip.jdevolope.herkultakip"
minSdkVersion 17
targetSdkVersion 28
versionCode 3
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
这是我的日志;
Process: com.herkultakip.jdevolope.herkultakip, PID: 9265
java.lang.NullPointerException: Attempt to read from field 'java.util.List com.herkultakip.jdevolope.herkultakip.Model.RssObject.items' on a null object reference
at com.herkultakip.jdevolope.herkultakip.Adapter.TestiAdapter.getItemCount(TestiAdapter.java:71)
如果您想向您展示任何东西,请告诉我:)
这个错误有什么问题?
但我不明白为什么它不能在 Andorid 9 上运行,而它适用于所有设备?
解决方案
我相信您的错误在于您的loadRss()
功能。
ProgressDialog dialog = new ProgressDialog(getActivity());
ProgressDialog
自 API 26 以来已被弃用。源
您应该使用进度指示器,例如ProgressBar
API >= 26
这解释了为什么它可以在您测试的所有其他 android 版本上运行。
推荐阅读
- docker - 当我通过 docker 使用 rpms 时,Centos 映像构建失败
- php - 为什么要使用“finally”关键字?
- ringcentral - 生产应用程序:无效或未知的客户端(从凭据页面复制的 ID)
- powershell - 对为什么必须在 Windows 上安装 PowerShell Core 感到困惑……?
- ibm-mobilefirst - 在修订包 7.1.0.00.20190704-0841 之后,MobileFirst 7.1 无法导出 ipa
- reactjs - yupError.inner 在将模式与 Formik 集成时未定义
- sed - makefile 中的 sed -e 's@ *@ @g' 命令中的 @ 符号是什么意思?
- wordpress - 我无法访问我的 Wordpress 仪表板中的任何页面或链接。返回为 404:找不到页面。我已经尝试了一切来修复它
- image - 通过 Slack API 或 Incoming Webhook 发送消息时,是否可以使用文件路径而不是 url 作为`image_url`?
- python-3.x - 如何为第一次出现某个值的每一行返回列索引