Почему релиз apk падает, но не в отладочной версии для GetFragments - PullRequest
0 голосов
/ 15 сентября 2018

Интересно, кто-нибудь мог бы посоветовать, почему

fragmentList=getSupportFragmentManager().getFragments();" 

в коде возвращает нуль в следующем коде:

selectedspecies.setData(ArrayChar); - который генерирует исключение нулевого указателя

и аналогично с

morphologicalcharacters.setSpeciesSelected(false); (который также генерирует исключение нулевого указателя)

.Я протестировал через USB-кабель на ряде устройств, которые работают хорошо, но сбой на телефонах клиентов.

public void SendData(String[] ArrayChar) //Receives selection from       Morphological Characters and sends it to Selected Species Fragment
{
   this.ArrayChar=ArrayChar;
   List<Fragment> fragmentList;
   fragmentList=getSupportFragmentManager().getFragments();
   int fragmentListSizeInt=fragmentList.size();
   String fragmentListSizeString=""+fragmentListSizeInt;
   Fragment morphfrag=getSupportFragmentManager().findFragmentById(morphid);

   //Fragment frag1=GlobalPageAdapter.getFragment(0);
   //Fragment frag2=GlobalPageAdapter.getFragment(1);

   //Toast.makeText(getApplicationContext(),"Error: Fragment List Size is: "+fragmentListSizeString, Toast.LENGTH_LONG).show(); //Test Code
    //https://developer.android.com/training/basics/fragments/communicating
   if (fragmentList.size()<1)
   {
       Toast.makeText(getApplicationContext(),"Error: Fragment List Array is empty - report error to Ecological Software Solutions at ecologicalsoftwaresolutions@gmail.com",Toast.LENGTH_LONG).show(); //Test Code
   }
   if (!SpeciesSelected)
   {
       int x=GlobalViewPager.getAdapter().getCount();
       SelectedSpecies selectedspecies=null;
       MorphologicalCharacters morphologicalcharacters=null;
       for (int xx = 0; xx < fragmentList.size(); xx++)
       {
          Object object = fragmentList.get(xx);
          String classobject = object.getClass().toString();
          if (classobject.equals("class com.ebookfrenzy.GramineaeIdentification.MorphologicalCharacters")) {
              morphologicalcharacters = (MorphologicalCharacters) fragmentList.get(xx);

          }
       }
       if (morphologicalcharacters!=null) {
           morphologicalcharacters.setSpeciesSelected(false);
       }
       else
       {
           MorphologicalCharacters newFragment=new MorphologicalCharacters();
           Bundle args=new Bundle();
           args.putBoolean("0",false);
           newFragment.setArguments(args);
           FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
           transaction.replace(R.id.container,newFragment);
           transaction.addToBackStack(null);
           transaction.commit();
           Toast.makeText(getApplicationContext(),"Morphological Character Fragment is null - report error to Ecological Software Solutions at ecologicalsoftwaresolutions@gmail.com",Toast.LENGTH_LONG).show();
       }

       for (int xx = 0; xx < fragmentList.size(); xx++) {
            Object object = fragmentList.get(xx);
            String classobject = object.getClass().toString();
            //Toast.makeText(getApplicationContext(),classobject,Toast.LENGTH_LONG).show(); //Test Code
            if (classobject.equals("class com.ebookfrenzy.GramineaeIdentification.SelectedSpecies")) {
                selectedspecies = (SelectedSpecies) fragmentList.get(xx);
            }
       }

       if (selectedspecies==null)
       {
           SelectedSpecies newFragment=new SelectedSpecies();
           Bundle args=new Bundle();
           args.putStringArray("1",ArrayChar);
           newFragment.setArguments(args);
           FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
           transaction.replace(R.id.container,newFragment);
           transaction.addToBackStack(null);
           transaction.commit();

           if (fragmentList.size()<1)
           {
               Toast.makeText(getApplicationContext(),"Error: Fragment List Array only has one fragment - report error to Ecological Software Solutions at ecologicalsoftwaresolutions@gmail.com",Toast.LENGTH_LONG).show();Toast.makeText(getApplicationContext(),"Error: Fragment List Array only has one fragment - report error to Ecological Software Solutions at ecologicalsoftwaresolutions@gmail.com",Toast.LENGTH_LONG).show();
           }
           Toast.makeText(getApplicationContext(),"Error: Selected Species Fragment is null - report error to Ecological Software Solutions at ecologicalsoftwaresolutions@gmail.com",Toast.LENGTH_LONG).show();
           //https://developer.android.com/reference/android/support/v4/app/FragmentManager
       }
       if (selectedspecies!=null)
       {
           selectedspecies.setData(ArrayChar);
       }
   }
}

Мои файлы оценок следующие: я что-то упустил в коде:

apply plugin: 'com.android.application'

android {
    signingConfigs {
        config {
            keyAlias [reacted]
            keyPassword [reacted]
            storeFile file('C:/Users/ajgra/Androidkeystore/release.keystore.jks')
            storePassword [reacted]
        }
    }
    compileSdkVersion 26
    buildToolsVersion '27.0.3'
    defaultConfig {
        applicationId "com.ebookfrenzy.tablayoutdemo"
        minSdkVersion 15
        targetSdkVersion 26
        multiDexEnabled true
        versionCode 16
        versionName "1.16"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    apply plugin: 'build-announcements'
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support:design:26.1.0'
    implementation 'com.android.support:support-v4:26.1.0'
    implementation 'com.android.support:cardview-v7:26.1.0'
    implementation 'com.android.support:recyclerview-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:multidex:1.0.3'
    //compile 'com.google.android.gms:play-services-ads:11.6.2'
    testImplementation 'junit:junit:4.12'
}

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
           url "https://maven.google.com"
           }
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Я не знаю, как это исправить.Более того, приложение также генерирует всевозможные странные ошибки в консоли разработчика Google Play, но не в тестовых устройствах, использующих apk отладки через USB-кабель.

Ошибка, скорее всего, в выпуске apk, а не в отладочном apk.Это как-то связано с ProGuard и стоит ли отключать Proguard?

Большое спасибо, Alasdair Grant

...