Интересно, кто-нибудь мог бы посоветовать, почему
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