首页 > 解决方案 > 我的应用程序运行良好,除了 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 上运行,而它适用于所有设备?

标签: javaandroidsdkrssversion

解决方案


我相信您的错误在于您的loadRss()功能。

ProgressDialog dialog = new ProgressDialog(getActivity());

ProgressDialog自 API 26 以来已被弃用。 您应该使用进度指示器,例如ProgressBarAPI >= 26

这解释了为什么它可以在您测试的所有其他 android 版本上运行。


推荐阅读