繁体   English   中英

从版本5.0中的收件箱中获取短信时,应用程序崩溃。 在onViewCreated()方法中崩溃

[英]app crashing while fetching sms from inbox in version 5.0. Crashing in onViewCreated() Method

请找到k的代码。 这是片段中。 请帮忙。 它只有在android version 5.0崩溃。 如果您愿意,我还可以共享Play商店控制台的详细信息。

@TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getActivity().setTitle(getString(R.string.dnd_caps));
//  getListView().addHeaderView(mHeader);
    if (((DNDMasterActivityNEW) getActivity()).checkPermissions()) {
        dialogWait = new DialogWait(getActivity());
        dialogWait.setCancelable(false);
        dialogWait.show();
        try {
            SubscriptionManager subscriptionManager = SubscriptionManager.from(getActivity().getApplicationContext());
            List<SubscriptionInfo> subscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();
            for (SubscriptionInfo subscriptionInfo : subscriptionInfoList) {
                int subscriptionId = subscriptionInfo.getSubscriptionId();
                int simSlotIndex = subscriptionInfo.getSimSlotIndex();
                String simNumber = subscriptionInfo.getNumber();
                String carrierName = subscriptionInfo.getCarrierName().toString();
                String displayName = subscriptionInfo.getDisplayName().toString();
                Log.d("DND_SUBS", "subscriptionId:" + subscriptionId);
                Log.d("DND_SUBS", "simslotIndex:" + simSlotIndex);
                Log.d("DND_SUBS", "simNumber:" + simNumber);
                Log.d("DND_SUBS", "carrierName:" + carrierName);
                Log.d("DND_SUBS", "displayName:" + displayName);
                hm.put(subscriptionId, simSlotIndex);
            }
        } catch (NoClassDefFoundError | Exception e) {
            e.printStackTrace();
        }

        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext().getApplicationContext());
        Boolean isAppRegistered = settings.getBoolean(Global.isAppRegistered, false);
        realm = Realm.getDefaultInstance();
        RealmResults<trai.gov.in.dnd.ml.model.Sms> smses = getAllSms();
        ArrayList<trai.gov.in.dnd.ml.model.Sms> smsArrayList = new ArrayList<>();
        smsArrayList.addAll(realm.copyFromRealm(smses));
     //   AsyncTaskRunner asyncTaskRunner = new AsyncTaskRunner();
     //   asyncTaskRunner.execute();
        dialogWait.dismiss();
        if (!smsArrayList.isEmpty()) {
            adapter = new SmsListAdapterRecyclerView(getActivity(), smsArrayList);
            recyclerView.setVisibility(View.VISIBLE);
            RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext(),
                        LinearLayoutManager.VERTICAL, false);
            recyclerView.setLayoutManager(mLayoutManager);
            recyclerView.setHasFixedSize(false);
            recyclerView.setLayoutFrozen(false);
            recyclerView.setItemViewCacheSize(30);
            recyclerView.setDrawingCacheEnabled(true);
            recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            recyclerView.setAdapter(adapter);
        } else {
            ll_probable_spam.setVisibility(View.GONE);
            recyclerView.setVisibility(View.GONE);
            no_sms.setVisibility(View.VISIBLE);
        }
    }
}

我只是想知道这条线是否也会崩溃

@TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)  

或为什么应用崩溃

请找到附加的堆栈跟踪

    java.lang.NoSuchMethodError: 
  at trai.gov.in.dnd.app.SmsFragment.onViewCreated (SmsFragment.java:97)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1314)
  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1528)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1595)
  at android.support.v4.app.BackStackRecord.executeOps (BackStackRecord.java:758)
  at android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManager.java:2363)
  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.java:2149)
  at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps (FragmentManager.java:2103)
  at android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:2013)
  at android.support.v4.app.FragmentManagerImpl$1.run (FragmentManager.java:710)
  at android.os.Handler.handleCallback (Handler.java:739)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:135)
  at android.app.ActivityThread.main (ActivityThread.java:5233)
  at java.lang.reflect.Method.invoke (Native Method)
  at java.lang.reflect.Method.invoke (Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:898)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:693)

问题出在SubscriptionManager

SubscriptionManager sm=SubscriptionManager.from(getActivity().getApplicationContext());

调用需要API级别22(当前最小值为19):android.telephony.SubscriptionManager

您必须在致电之前检查Build版本。 以下是根据您的需要对其进行修改的示例。

 @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
public static String getSubscriptionInfo(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1)
        return "Not supported";
    if (!((DNDMasterActivityNEW) getActivity()).checkPermissions())
        return "No permission";
    StringBuilder stringBuilder=new StringBuilder();
    SubscriptionManager sm = SubscriptionManager.from(context);
    // Do your task here
    return stringBuilder.toString();
}

注意:-不要在onViewCreated()添加@TargetApi批注,它是无用的。 onViewCreated()是片段的生命周期方法,旨在被调用。
编辑您可以先检查可用性,然后再继续进行。

 private boolean canGetSubscriptionInfo{
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1)
        return false;
    if (!((DNDMasterActivityNEW) getActivity()).checkPermissions())
        return false;
   return true;
}

解决方案在这里

订阅类在6.0​​以下不可用,因此应用程序崩溃。 我针对5.0和5.1版本删除了该功能,效果很好。 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM