Skip to content

Conversation

@simarsingh24
Copy link
Member

fixes #616

@simarsingh24
Copy link
Member Author

Also tried using reflections here are the details :
Called using checkAndLoadFragment(ProfileFragment::javaClass.name)
Instantiated as

val fragClass = Class.forName(java)
        val construc = fragClass.constructors[0]
        val frag = construc.newInstance()
        loadFragment(frag as Fragment)

Error log

10-07 10:42:38.940 2666-2666/? E/Zygote: isWhitelistProcess - Process is Whitelisted
10-07 10:42:38.941 2666-2666/? E/libpersona: scanKnoxPersonas
    Couldn't open the File - /data/system/users/0/personalist.xml - No such file or directory
10-07 10:42:42.001 2666-2666/com.eventyay.attendee E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.eventyay.attendee, PID: 2666
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
     Caused by: java.lang.ClassNotFoundException: javaClass
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:453)
        at java.lang.Class.forName(Class.java:378)
        at org.fossasia.openevent.general.MainActivity.checkAndLoadFragment(MainActivity.kt:65)
        at org.fossasia.openevent.general.MainActivity.access$checkAndLoadFragment(MainActivity.kt:23)
        at org.fossasia.openevent.general.MainActivity$listener$1.onNavigationItemSelected(MainActivity.kt:50)
        at android.support.design.widget.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:182)
        at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
        at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
        at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
        at android.support.design.internal.BottomNavigationMenuView$1.onClick(BottomNavigationMenuView.java:95)
        at android.view.View.performClick(View.java:6877)
        at android.view.View$PerformClick.run(View.java:26069)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
     Caused by: java.lang.ClassNotFoundException: Didn't find class "javaClass" on path: DexPathList[[zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/base.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_dependencies_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_resources_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_0_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_1_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_2_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_3_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_4_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_5_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_6_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_7_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_8_apk.apk", zip file "/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/lib/arm64, /system/lib64, /vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at java.lang.Class.classForName(Native Method) 
        at java.lang.Class.forName(Class.java:453) 
        at java.lang.Class.forName(Class.java:378) 
        at org.fossasia.openevent.general.MainActivity.checkAndLoadFragment(MainActivity.kt:65) 
        at org.fossasia.openevent.general.MainActivity.access$checkAndLoadFragment(MainActivity.kt:23) 
        at org.fossasia.openevent.general.MainActivity$listener$1.onNavigationItemSelected(MainActivity.kt:50) 
        at android.support.design.widget.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:182) 
        at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822) 
        at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171) 
        at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973) 
        at android.support.design.internal.BottomNavigationMenuView$1.onClick(BottomNavigationMenuView.java:95) 
        at android.view.View.performClick(View.java:6877) 
        at android.view.View$PerformClick.run(View.java:26069) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6938) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
    	Suppressed: java.io.IOException: No original dex files found for dex location (arm64) /data/app/com.eventyay.attendee-zgCBjoEcOt6Fib7Jx4VdYg==/split_lib_resources_apk.apk
        at dalvik.system.DexFile.openDexFileNative(Native Method)
        at dalvik.system.DexFile.openDexFile(DexFile.java:353)
        at dalvik.system.DexFile.<init>(DexFile.java:100)
        at dalvik.system.DexFile.<init>(DexFile.java:74)
        at dalvik.system.DexPathList.loadDexFile(DexPathList.java:374)
        at dalvik.system.DexPathList.makeDexElements(DexPathList.java:337)
        at dalvik.system.DexPathList.<init>(DexPathList.java:157)
        at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65)
        at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:64)
        at com.android.internal.os.PathClassLoaderFactory.createClassLoader(PathClassLoaderFactory.java:43)
        at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:69)
        at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:36)
        at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:678)
        at android.app.LoadedApk.getClassLoader(LoadedApk.java:711)
        at android.app.LoadedApk.getResources(LoadedApk.java:944)
        at android.app.ContextImpl.createAppContext(ContextImpl.java:2303)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5937)
        at android.app.ActivityThread.-wrap1(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        		... 5 more

}

private fun checkAndLoadFragment(fragment: Fragment) {
val frag = supportFragmentManager.findFragmentByTag(fragment::class.java.name)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rename to savedFragment

if (frag != null) {
loadFragment(frag)
Timber.d("Loading fragment from stack...")
} else loadFragment(fragment)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrap in curly braces

val frag = supportFragmentManager.findFragmentByTag(fragment::class.java.name)
if (frag != null) {
loadFragment(frag)
Timber.d("Loading fragment from stack...")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add class name in log to show which fragment is being loaded

import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.*
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Irrelevant change

val savedFragment = supportFragmentManager.findFragmentByTag(fragment::class.java.name)
if (savedFragment != null) {
loadFragment(savedFragment)
Timber.d("""Loading fragment from stack ${fragment::class.java}""")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

even a single " would work

@simarsingh24
Copy link
Member Author

@nikit19 @iamareebjamal please review and merge

@iamareebjamal iamareebjamal merged commit deaf58a into fossasia:development Oct 9, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

retain fragments while switching inbetween

3 participants