java.lang.IllegalStateException: onSaveInstanceState এর পরে এই ক্রিয়াটি সম্পাদন করতে পারবেন না


135

আমি আমার অ্যাপ্লিকেশনটির জন্য সমর্থন লাইব্রেরি ব্যবহার করছি। আমার ফ্রেগমেন্টঅ্যাক্টিভিটিতে আমি ইন্টারনেট থেকে ডেটা ডাউনলোড করার জন্য একটি অ্যাসিঙ্কটাস্ক ব্যবহার করছি। অনপ্রি এক্সেকিউট () পদ্ধতিতে আমি একটি টুকরো যোগ করি এবং অনপস্টএক্সেকিউট () পদ্ধতিতে আমি এটি আবার সরিয়ে ফেলি। যখন ওরিয়েন্টেশনটির মধ্যে পরিবর্তন হয় তখন আমি উল্লিখিত ব্যতিক্রম পাই। বিস্তারিত একবার দেখুন:

private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> {
    DummyFragment dummyFragment; 
    FragmentManager fm;
    FragmentTransaction ft;

@Override
protected void onPreExecute() {
    Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute");
    dummyFragment = DummyFragment.newInstance();
    fm = getSupportFragmentManager();
    ft = fm.beginTransaction();
    ft.add(dummyFragment, "dummy_fragment");
    ft.commit();
}

@Override
protected void onPostExecute(String result) {
    Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute");
    ft = fm.beginTransaction();
    ft.remove(dummyFragment);
    ft.commit();
}

@Override
protected String doInBackground(String... name) {
    Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/doInBackground");
    ...
}

আমি নিম্নলিখিত লগকাট পেতে:

01-05 23:54:19.958: V/MyFragmentActivity(12783): onFriendAddedAsyncTask/onPreExecute
01-05 23:54:19.968: V/DummyFragment(12783): onAttach
01-05 23:54:19.968: V/DummyFragment(12783): onCreate
01-05 23:54:19.968: V/MyFragmentActivity(12783): onFriendAddedAsyncTask/doInBackground
01-05 23:54:19.973: V/DummyFragment(12783): onCreateView
01-05 23:54:19.973: V/DummyFragment(12783): onActivityCreated
01-05 23:54:19.973: V/DummyFragment(12783): onStart
01-05 23:54:19.973: V/DummyFragment(12783): onResume
01-05 23:54:21.933: V/MyFragmentActivity(12783): onSaveInstanceState
01-05 23:54:21.933: V/DummyFragment(12783): onSaveInstanceState
01-05 23:54:21.933: V/MyFragmentActivity(12783): onPause
01-05 23:54:21.933: V/DummyFragment(12783): onPause
01-05 23:54:21.938: V/MyFragmentActivity(12783): onStop
01-05 23:54:21.938: V/DummyFragment(12783): onStop
01-05 23:54:21.938: V/MyFragmentActivity(12783): onDestroy
01-05 23:54:21.938: V/DummyFragment(12783): onDestroyView
01-05 23:54:21.938: V/DummyFragment(12783): onDestroy
01-05 23:54:21.938: V/DummyFragment(12783): onDetach
01-05 23:54:21.978: V/MyFragmentActivity(12783): onCreate
01-05 23:54:21.978: V/DummyFragment(12783): onAttach
01-05 23:54:21.978: V/DummyFragment(12783): onCreate
01-05 23:54:22.263: V/MyFragmentActivity(12783): onStart
01-05 23:54:22.313: V/DummyFragment(12783): onCreateView
01-05 23:54:22.313: V/DummyFragment(12783): onActivityCreated
01-05 23:54:22.313: V/DummyFragment(12783): onStart
01-05 23:54:22.323: V/MyFragmentActivity(12783): onResume
01-05 23:54:22.323: V/MyFragmentActivity(12783): onPostResume
01-05 23:54:22.323: V/MyFragmentActivity(12783): onResumeFragments
01-05 23:54:22.323: V/DummyFragment(12783): onResume
01-05 23:54:27.123: V/MyFragmentActivity(12783): onFriendAddedAsyncTask/onPostExecute
01-05 23:54:27.123: D/AndroidRuntime(12783): Shutting down VM
01-05 23:54:27.123: W/dalvikvm(12783): threadid=1: thread exiting with uncaught exception (group=0x4001d7d0)
01-05 23:54:27.138: E/AndroidRuntime(12783): FATAL EXCEPTION: main
01-05 23:54:27.138: E/AndroidRuntime(12783): java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1314)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1325)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:548)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:532)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at com.xyz.dummy.MyFragmentActivity$onFriendAddedAsyncTask.onPostExecute(MyFragmentActivity.java:447)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at com.xyz.dummy.MyFragmentActivity$onFriendAddedAsyncTask.onPostExecute(MyFragmentActivity.java:1)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.os.AsyncTask.finish(AsyncTask.java:417)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.os.Looper.loop(Looper.java:123)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at android.app.ActivityThread.main(ActivityThread.java:4627)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at java.lang.reflect.Method.invokeNative(Native Method)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at java.lang.reflect.Method.invoke(Method.java:521)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-05 23:54:27.138: E/AndroidRuntime(12783):    at dalvik.system.NativeStart.main(Native Method)

অনুরূপ সমস্যাগুলি সম্পর্কে অন্যান্য থ্রেডগুলিতে কারণটি মনে হয় যে onResume () পদ্ধতিটি কল করার আগে onPostExecute পদ্ধতিটি ডাকা হয়। তবে আমি ব্যতিক্রমটি পাই যদিও অনারিউম () এর আগে বলা হয়েছিল।

কেউ কি জানে কী ভুল?

ক্রিয়াকলাপটি এরকম দেখাচ্ছে:

public class MyFragmentActivity extends FragmentActivity implements OnFriendSelectedListener, OnFriendAddedListener, OnFriendOptionSelectedListener, LoaderCallbacks<Cursor> {

@Override
public void onCreate(Bundle savedInstanceState) {
    Log.v("MyFragmentActivity", "onCreate");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_activity_layout);
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    FriendListFragment friendListFragment = (FriendListFragment)fm.findFragmentById(R.id.friend_list_fragment_layout);
    if (friendListFragment == null) {
        friendListFragment = new FriendListFragment(); 
        ft.add(R.id.friend_list_fragment_layout, friendListFragment);
        ft.commit();
        fm.executePendingTransactions();
        startService(new Intent(this, MyIntentService.class));
        getSupportLoaderManager().initLoader(CHECK_EMPTY_DATABASE, null, this);
    }
}

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.fragment_activity_options_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    switch (item.getItemId()) {
    case R.id.add_friend_menu_item:
        AddFriendDialogFragment addFriendDialogFragment = AddFriendDialogFragment.newInstance();
        addFriendDialogFragment.show(getSupportFragmentManager(), "add_friend_dialog_fragment");
        return true;
    default:
        return false;
    }
}

@Override
public void onFriendAdded(String name) {
    name = name.trim();
    if (name.length() > 0) {
        new onFriendAddedAsyncTask().execute(name);
    }
}

কমিটএলিংস্টেস্টলস () ব্যবহার করার সময় আমি নিম্নলিখিত ব্যতিক্রমগুলি পাই:

01-06 14:54:29.548: E/AndroidRuntime(18020): FATAL EXCEPTION: main
01-06 14:54:29.548: E/AndroidRuntime(18020): java.lang.IllegalStateException: Activity has been destroyed
01-06 14:54:29.548: E/AndroidRuntime(18020):    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1329)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:548)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:536)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at com.xyz.dummy.FadiaFragmentActivity$onFriendAddedAsyncTask.onPostExecute(FadiaFragmentActivity.java:461)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at com.xyz.dummy.FadiaFragmentActivity$onFriendAddedAsyncTask.onPostExecute(FadiaFragmentActivity.java:1)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at android.os.AsyncTask.finish(AsyncTask.java:417)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at android.os.Looper.loop(Looper.java:123)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at android.app.ActivityThread.main(ActivityThread.java:4627)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at java.lang.reflect.Method.invokeNative(Native Method)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at java.lang.reflect.Method.invoke(Method.java:521)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-06 14:54:29.548: E/AndroidRuntime(18020):    at dalvik.system.NativeStart.main(Native Method)

আমি নিম্নরূপে অ্যাসিনটাস্কটি প্রয়োগ করার সময় আমি একই অবৈধ স্টেটএক্সেপশন পাই, কারণ FindFraamentById () পদ্ধতিটি একটি নাল পয়েন্টার প্রদান করে।

private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> {

    protected void onPreExecute() {
        Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute");
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        DummyFragment dummyFragment = DummyFragment.newInstance();
        ft.add(R.id.dummy_fragment_layout, dummyFragment);
        ft.commit();
    }

    protected void onPostExecute(String result) {
        Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute");
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        DummyFragment dummyFragment = (DummyFragment) fm.findFragmentById(R.id.dummy_fragment_layout);
        ft.remove(dummyFragment);
        ft.commitAllowingStateLoss();
    }

পরবর্তী পদক্ষেপে আমি ডমিফ্রেগমেন্ট যুক্ত এবং অপসারণের জন্য একটি হ্যান্ডলার ব্যবহার করি। অতিরিক্তভাবে আমি আরও কিছু ডিবাগ আউটপুট যুক্ত করেছি।

private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> {

    @Override
    protected void onPreExecute() {
        Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute " + getSupportFragmentManager());
        Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute " + getSupportFragmentManager().findFragmentById(R.id.dummy_fragment_layout));
        Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute " + getSupportFragmentManager().findFragmentById(R.id.friend_list_fragment_layout));

        new Handler().post(new Runnable() {
            public void run() {
                Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute " + getSupportFragmentManager());
                Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute " + getSupportFragmentManager().findFragmentById(R.id.dummy_fragment_layout));
                Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPreExecute " + getSupportFragmentManager().findFragmentById(R.id.friend_list_fragment_layout));
                FragmentManager fm = getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                DummyFragment dummyFragment = DummyFragment.newInstance();
                ft.add(R.id.dummy_fragment_layout, dummyFragment);
                ft.commit();
            }
        });

    @Override
    protected void onPostExecute(String result) {
        Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute " + getSupportFragmentManager());
        Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute " + getSupportFragmentManager().findFragmentById(R.id.dummy_fragment_layout));
        Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute " + getSupportFragmentManager().findFragmentById(R.id.friend_list_fragment_layout));

        new Handler().post(new Runnable() {
            public void run() {
                Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute " + getSupportFragmentManager());
                Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute " + getSupportFragmentManager().findFragmentById(R.id.dummy_fragment_layout));
                Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute " + getSupportFragmentManager().findFragmentById(R.id.friend_list_fragment_layout));
                FragmentManager fm = getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                DummyFragment dummyFragment = (DummyFragment) fm.findFragmentById(R.id.dummy_fragment_layout);
                ft.remove(dummyFragment);
                ft.commitAllowingStateLoss();
            }
        });

আমি নিম্নলিখিত লগকাট পেতে:

01-07 19:00:17.273: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPreExecute FragmentManager{45e384a8 in MyFragmentActivity{45e38358}}
01-07 19:00:17.273: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPreExecute null
01-07 19:00:17.273: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPreExecute FriendListFragment{45e38ab0 #0 id=0x7f0a0002}
01-07 19:00:17.283: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPreExecute FragmentManager{45e384a8 in MyFragmentActivity{45e38358}}
01-07 19:00:17.288: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/doInBackground
01-07 19:00:17.288: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPreExecute null
01-07 19:00:17.288: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPreExecute FriendListFragment{45e38ab0 #0 id=0x7f0a0002}
01-07 19:00:17.308: V/DummyFragment(4124): onAttach DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:17.308: V/DummyFragment(4124): onCreate DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:17.308: V/DummyFragment(4124): onCreateView DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:17.308: V/DummyFragment(4124): onActivityCreated DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:17.308: V/DummyFragment(4124): onStart DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:17.313: V/DummyFragment(4124): onResume DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.098: V/MyFragmentActivity(4124): onSaveInstanceState DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.098: V/DummyFragment(4124): onSaveInstanceState DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.098: V/MyFragmentActivity(4124): onPause DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.098: V/DummyFragment(4124): onPause DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.103: V/MyFragmentActivity(4124): onStop DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.103: V/DummyFragment(4124): onStop DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.103: V/MyFragmentActivity(4124): onDestroy DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.103: V/DummyFragment(4124): onDestroyView DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.108: V/DummyFragment(4124): onDestroy DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.113: V/DummyFragment(4124): onDetach DummyFragment{45dd7498 #2 id=0x7f0a0004}
01-07 19:00:18.138: V/MyFragmentActivity(4124): onCreate
01-07 19:00:18.138: V/FriendListFragment(4124): FriendListFragment
01-07 19:00:18.138: V/FriendListFragment(4124): onAttach FriendListFragment{45e4a7f8 #0 id=0x7f0a0002}
01-07 19:00:18.138: V/FriendListFragment(4124): onCreate FriendListFragment{45e4a7f8 #0 id=0x7f0a0002}
01-07 19:00:18.148: V/DummyFragment(4124): onAttach DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.153: V/DummyFragment(4124): onCreate DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.523: V/MyFragmentActivity(4124): onStart DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.543: V/FriendListFragment(4124): onActivityCreated FriendListFragment{45e4a7f8 #0 id=0x7f0a0002}
01-07 19:00:18.548: V/DummyFragment(4124): onCreateView DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.548: V/DummyFragment(4124): onActivityCreated DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.548: V/FriendListFragment(4124): onLoadFinished FragmentManager{45d8e478 in MyFragmentActivity{45e4a6d8}}
01-07 19:00:18.548: V/FriendListFragment(4124): onLoadFinished FriendListFragment{45e4a7f8 #0 id=0x7f0a0002}
01-07 19:00:18.553: V/DummyFragment(4124): onStart DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.553: V/FriendListFragment(4124): onLoadFinished FragmentManager{45d8e478 in MyFragmentActivity{45e4a6d8}}
01-07 19:00:18.553: V/FriendListFragment(4124): onLoadFinished FriendListFragment{45e4a7f8 #0 id=0x7f0a0002}
01-07 19:00:18.558: V/MyFragmentActivity(4124): onResume DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.558: V/MyFragmentActivity(4124): onPostResume DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.558: V/MyFragmentActivity(4124): onResumeFragments DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.558: V/FriendListFragment(4124): onResume FriendListFragment{45e4a7f8 #0 id=0x7f0a0002}
01-07 19:00:18.563: V/FriendListFragment(4124): onCreateLoader FriendListFragment{45e4a7f8 #0 id=0x7f0a0002}
01-07 19:00:18.563: V/DummyFragment(4124): onResume DummyFragment{45d7d1a0 #2 id=0x7f0a0004}
01-07 19:00:18.723: V/FriendListFragment(4124): onLoadFinished FragmentManager{45d8e478 in MyFragmentActivity{45e4a6d8}}
01-07 19:00:18.723: V/FriendListFragment(4124): onLoadFinished FriendListFragment{45e4a7f8 #0 id=0x7f0a0002}
01-07 19:00:18.893: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPostExecute FragmentManager{45e384a8 in null}}
01-07 19:00:18.893: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPostExecute null
01-07 19:00:18.893: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPostExecute null
01-07 19:00:18.923: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPostExecute FragmentManager{45e384a8 in null}}
01-07 19:00:18.923: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPostExecute null
01-07 19:00:18.923: V/MyFragmentActivity(4124): onFriendAddedAsyncTask/onPostExecute null
01-07 19:00:18.928: D/AndroidRuntime(4124): Shutting down VM
01-07 19:00:18.928: W/dalvikvm(4124): threadid=1: thread exiting with uncaught exception (group=0x4001d7d0)
01-07 19:00:18.938: E/AndroidRuntime(4124): FATAL EXCEPTION: main
01-07 19:00:18.938: E/AndroidRuntime(4124): java.lang.IllegalStateException: Activity has been destroyed
01-07 19:00:18.938: E/AndroidRuntime(4124):     at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1329)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:548)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:536)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at com.xyz.dummy.MyFragmentActivity$onFriendAddedAsyncTask$2.run(MyFragmentActivity.java:476)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at android.os.Handler.handleCallback(Handler.java:587)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at android.os.Looper.loop(Looper.java:123)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at android.app.ActivityThread.main(ActivityThread.java:4627)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at java.lang.reflect.Method.invokeNative(Native Method)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at java.lang.reflect.Method.invoke(Method.java:521)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-07 19:00:18.938: E/AndroidRuntime(4124):     at dalvik.system.NativeStart.main(Native Method)

অনপ্রি এক্সেকিউট () এ ফ্রেন্ডলিস্টফ্র্যাগমেন্টের আইডি = 0x7f0a0002 রয়েছে। হ্যান্ডলারের ভিতরে ডামিফ্রেগমেন্টটি id = 0x7f0a0004 দিয়ে তৈরি করা হয়েছে। অনপস্টএক্সেকিউটে () উভয় আইডি শূন্য। অনপ্রি এক্সেকিউট () এ মাইফ্রেগমেন্টএকটিভিটির ঠিকানা 45e38358। তবে onPostExecute () এ এটি বাতিল। তবে উভয় পদ্ধতিতে ফ্র্যাগমেন্টম্যানেজারের ঠিকানা 45e384a8। আমার ধারণা পোষ্টএক্সেকুটে একটি অবৈধ ফ্রেগমেন্টম্যানেজার ব্যবহার করে। কিন্তু কেন?


1
আমি একবার এই সমস্যাটি নিয়েছিলাম এবং এটির সাথে প্রতিশ্রুতি প্রতিস্থাপন করে এটি ঠিক করেছি:
কেটা

আমি ইতিমধ্যে এটি চেষ্টা করেছি, কিন্তু সাফল্য ছাড়াই। লগগ্যাট অনুসারে খণ্ডটি সঠিক অবস্থায় থাকা উচিত।
সামো

আপনি কি আপনার ক্রিয়াকলাপ কোড পোস্ট করতে পারেন?
রবার্ট এস্তিভিল

আমি যখন কমিটএলিংস্টেস্টলস () ব্যবহার করি তখন আমি আলাদা ব্যতিক্রম পাই (উপরে দেখুন))
সামো

6
আপনারা যারা এখনও সমাধানের সন্ধান করছেন তাদের জন্য ... আরও তথ্যের জন্য এই বিষয়টি সম্পর্কে এই ব্লগ পোস্টটি দেখুন।
অ্যালেক্স লকউড

উত্তর:


97

Handlerনিম্নলিখিত হিসাবে আপনার লেনদেন করা উচিত :

@Override
protected void onPostExecute(String result) {
    Log.v("MyFragmentActivity", "onFriendAddedAsyncTask/onPostExecute");
    new Handler().post(new Runnable() {
            public void run() {
                fm = getSupportFragmentManager();
                ft = fm.beginTransaction();
                ft.remove(dummyFragment);
                ft.commit();
            }
        });
}

12
এটি সাহায্য করে না। আচরণ আগের মতো।
সামো

@ সামো দয়া করে আপনি কি সমস্যাটি সমাধান করতে সক্ষম হয়েছেন? আমার খুব অনুরূপ পরিস্থিতির লিঙ্ক রয়েছে
লিসা আন

3
এই কোডটি বিবেচনা করুন:private static WeakReference<FragmentActivity> mActivity = null;
ওলেগ ভাস্কেভিচ

2
সংক্ষেপে WeakReferenceআপনাকে ক্রিয়াকলাপ ফাঁস হতে বাধা দেয় ... mActivity.get()উদাহরণটি পেতে আসলে আপনাকে কল করতে হবে এবং যদি কার্যকলাপটি ধ্বংস হয়ে যায় তবে তা বাতিল হয়ে যাবে। এটি আপডেট করার জন্য আপনাকে লিখতে হবে mActivity = new WeakReference<FragmentActivity>(this);- একটি ভাল জায়গা রয়েছে onCreate()- যা রেফারেন্স আপডেট করবে।
ওলেগ ভাস্কেভিচ

107
আপনারা যারা এখনও সমাধানের সন্ধান করছেন তাদের জন্য ... আরও তথ্যের জন্য এই বিষয়টি সম্পর্কে এই ব্লগ পোস্টটি দেখুন।
অ্যালেক্স লকউড

55

ধন্যবাদ ওলেগ ভাস্কেভিচ একটি ব্যবহার WeakReferenceএর FragmentActivityসমস্যার সমাধান। আমার কোডটি এখন নীচের মত দেখাচ্ছে:

public class MyFragmentActivity extends FragmentActivity implements OnFriendAddedListener {

    private static WeakReference<MyFragmentActivity> wrActivity = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        wrActivity = new WeakReference<MyFragmentActivity>(this);
        ...

    private class onFriendAddedAsyncTask extends AsyncTask<String, Void, String> {

        @Override
        protected void onPreExecute() {
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            DummyFragment dummyFragment = DummyFragment.newInstance();
            ft.add(R.id.dummy_fragment_layout, dummyFragment);
            ft.commit();
        }

        @Override
        protected void onPostExecute(String result) {
            final Activity activity = wrActivity.get();
            if (activity != null && !activity.isFinishing()) {
                FragmentManager fm = activity.getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                DummyFragment dummyFragment = (DummyFragment) fm.findFragmentById(R.id.dummy_fragment_layout);
                ft.remove(dummyFragment);
                ft.commitAllowingStateLoss();
            }
        }

দুর্বল রেফারেন্স ধারণাটি আসলেই খুব স্মার্ট একটি, এটি প্রয়োজনীয় যখন প্রয়োজন তখন সহজেই আবর্জনা সংগ্রহ করতে দেয়। সামো আপ আপ সামো!
জিমি Ilenloa

স্থির কেন এখানে ব্যবহার করা হয়? কি হবে যদি আমি ব্যবহার MyFragmentActivity mActivity = this ?সঙ্গে স্ট্যাটিক & WeakReference
Bharath

স্ট্যাটিক রেফারেন্সটি বেশ খারাপ ইঞ্জিনিয়ারিং, আপনার নিজের অ্যাসিচটাস্কটি লাইফসাইকেলে বেঁধে দেওয়া উচিত এবং যখন প্রয়োজন হবে তখন বাতিল করা উচিত
ব্রেকলাইন

38

আমি বিশ্বাস করি যে এই প্রশ্নের সঠিক উত্তরটি নিম্নলিখিত পদ্ধতি।

public abstract int commitAllowingStateLoss ()

প্রতিশ্রুতিবদ্ধ () পছন্দ করে তবে কোনও ক্রিয়াকলাপের রাজ্য সংরক্ষণের পরে প্রতিশ্রুতি সম্পাদনের অনুমতি দেয়। এটি বিপজ্জনক কারণ কারণ যদি ক্রিয়াকলাপটি পরে তার রাজ্য থেকে পুনরুদ্ধার করা প্রয়োজন তবে প্রতিশ্রুতিটি হারাতে পারে, সুতরাং এটি কেবলমাত্র সেই ক্ষেত্রে ব্যবহার করা উচিত যেখানে ইউআই রাষ্ট্রের পক্ষে ব্যবহারকারীর উপর অপ্রত্যাশিতভাবে পরিবর্তন ঘটে।

উপরের বর্ণনাটি এই পদ্ধতির সাথে সম্পর্কিত।

protected void onSaveInstanceState(android.os.Bundle outState)

ডিভাইসটি ঘুমাতে গেলে এই সমস্যাটি অবিকল ঘটে।

http://developer.android.com/reference/android/app/FragmentTransaction.html


25

সংক্ষিপ্ত এবং কাজের সমাধান:

সাধারণ পদক্ষেপগুলি অনুসরণ করুন:

পদক্ষেপ 1 : onSaveInstanceStateসম্পর্কিত খণ্ডে ওভাররাইড রাষ্ট্র। এবং এটি থেকে সুপার পদ্ধতি সরান।

@Override
public void onSaveInstanceState(Bundle outState) {
}

পদক্ষেপ 2 : খণ্ডের ক্রিয়াকলাপের CommitAllowingStateLoss();পরিবর্তে ব্যবহার করুন commit();

fragmentTransaction.commitAllowingStateLoss();

2
ধন্যবাদ। এটি আমার পক্ষে কাজ করে তবে আমি জানি এটি সর্বোত্তম সমাধান নয়।
wendigo

2
সুপার পদ্ধতি অপসারণ, আপনার খণ্ডের রাজ্যগুলি সংরক্ষণও অক্ষম করে।
জুয়ান

1
ধন্যবাদ প্রচুর.এই ব্যতিক্রমটি তৈরি করছিল, এই সমাধানটি ভালভাবে কাজ করেছে ..
দীপক

11

isFinishing()খণ্ডটি দেখানোর আগে কার্যকলাপটি পরীক্ষা করে দেখুন ।

উদাহরণ:

if(!isFinishing()) {
FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            DummyFragment dummyFragment = DummyFragment.newInstance();
            ft.add(R.id.dummy_fragment_layout, dummyFragment);
            ft.commitAllowingStateLoss();
}

5

আমারো একই সমস্যা যা আমি থেকে কিছু টুকরা লেনদেন কোড চলন্ত দ্বারা নির্ধারিত ছিল onResume()মধ্যে onStart()

আরও নির্ভুল হতে: আমার অ্যাপ্লিকেশনটি একটি লঞ্চার laun অ্যান্ড্রয়েড হোম বোতাম টিপানোর পরে, ব্যবহারকারী তার সিদ্ধান্ত মনে না হওয়া অবধি কোনও প্রবর্তক চয়ন করতে পারে। এই মুহুর্তে "ফিরে" যাওয়ার সময় (উদাহরণস্বরূপ গ্রেইশ অঞ্চলে আলতো চাপ দিয়ে) অ্যাপটি ক্র্যাশ হয়ে গেছে।

হতে পারে এটি কাউকে সাহায্য করে।


4

commitAllowingStateLoss()পরিবর্তে ব্যবহার করুন commit()

যখন আপনি commit()এটি ব্যবহার করবেন তখন রাষ্ট্রীয় ক্ষতি দেখা দিলে একটি ব্যতিক্রম ছুঁড়ে ফেলতে পারে তবে রাষ্ট্রীয় ক্ষতি commitAllowingStateLoss()ছাড়াই লেনদেন সংরক্ষণ করে যাতে রাষ্ট্রের ক্ষয় দেখা দিলে কোনও ব্যতিক্রম ছুঁড়ে না ফেলে।


2

এটি আমার জন্য হয়েছিল, কারণ আমি commit()সাবফ্র্যাগমেন্ট থেকে প্রার্থনা করছি যা ক্রিয়াকলাপ ফাঁস করছিল। এটি একটি সম্পত্তি হিসাবে ক্রিয়াকলাপ রেখেছিল এবং একটি ঘূর্ণায়মান ক্রিয়াকলাপের পরিবর্তনশীল দ্বারা আপডেট করা হয়নি onAttach();তাই আমি ধরে রাখা (setRetainInstance(true);)খণ্ড দ্বারা জম্বি ক্রিয়াকলাপে লেনদেন করার চেষ্টা করছিলাম ।


2

ব্যতিক্রমটির কারণ হ'ল FragmentActivityরানটাইমের সময় পুনরায় সৃষ্টি AsyncTaskএবং পূর্ববর্তী অ্যাক্সেস যা পরে ধ্বংস FragmentActivityহয়ে onPostExecute()যায়।

নতুনটির জন্য একটি বৈধ রেফারেন্স পেতে সমস্যা FragmentActivity। এই তন্ন তন্ন জন্য কোন পদ্ধতি getActivity()কিংবা findById()বা অনুরূপ কিছু। এই ফোরামটি এই ইস্যু অনুসারে থ্রেডে পূর্ণ (যেমন অনুসন্ধান করুন "Activity context in onPostExecute")। তাদের মধ্যে কয়েকজন কর্মক্ষেত্রের বর্ণনা দিচ্ছেন (এখন অবধি আমি কোনও ভাল পাইনি)।

আমার উদ্দেশ্যে কোনও পরিষেবা ব্যবহার করা এটি আরও ভাল সমাধান হতে পারে।


2

এই সমস্যার জন্য একটি বিকল্প সমাধান (সেরা সমাধান নয়) রয়েছে, তবে কাজ করে। পতাকা ব্যবহার করে আপনি এটি নীচের মত পরিচালনা করতে পারেন

/**
 * Flag to avoid "java.lang.IllegalStateException: Can not perform this action after
 * onSaveInstanceState". Avoid Fragment transaction until onRestoreInstanceState or onResume
 * gets called.
 */
private boolean isOnSaveInstanceStateCalled = false;


@Override
public void onRestoreInstanceState(final Bundle bundle) {
    .....
    isOnSaveInstanceStateCalled = false;
    .....
}

@Override
public void onSaveInstanceState(final Bundle outState) {
    .....
    isOnSaveInstanceStateCalled = true;
    .....
}

@Override
public void onResume() {
    super.onResume();
    isOnSaveInstanceStateCalled = false;
    .....
}

এবং booleanখণ্ড লেনদেন করার সময় আপনি এই মানটি পরীক্ষা করতে পারেন ।

private void fragmentReplace(Fragment fragment, String fragmentTag){
    if (!isOnSaveInstanceStateCalled) {
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.layout_container, fragment, fragmentTag)
                .commit();
    }
}

1

এর মূল্য কী; আমার এমন ত্রুটিটি একটি অ্যাপ্লিকেশনটিতে ছিল যা পটভূমিতে পরিষেবাগুলি চলছিল। তার মধ্যে একটিতে একটি সময়সীমা ডায়ালগ ব্যবহারকারীর কাছে দেখাতে হয়েছিল। অ্যাপ্লিকেশনটি আর পূর্বগ্রহে চলমান না থাকলে সেই সংলাপটি এই ত্রুটির কারণ হয়ে উঠল।

অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে থাকাকালীন আমাদের ক্ষেত্রে ডায়ালগটি প্রদর্শন করা কার্যকর ছিল না তাই আমরা কেবল এটির উপর নজর রাখি (বুলিয়ান ফ্ল্যাশড অনপেজ এনআরএসিউম) এবং তারপরে কেবল তখনই ডায়ালগটি প্রদর্শিত হয় যখন অ্যাপ্লিকেশনটি ব্যবহারকারীটির কাছে দৃশ্যমান থাকে।


1

সমাধান 1: ওভাররাইড করুন onSaveInstanceState()এবং এতে থাকা সুপার কলটি সরিয়ে ফেলুন।

@Override
public void onSaveInstanceState(Bundle outState) {
}

সমাধান 2: ওভাররাইড করুন onSaveInstanceState()এবং সুপার কলের আগে আপনার খণ্ডগুলি সরান

@Override
public void onSaveInstanceState(Bundle outState) {
     // TODO: Add code to remove fragment here
     super.onSaveInstanceState(outState);
}

1

এই সমস্যাটি তখন ঘটে যখন কোনও প্রক্রিয়া যার ক্রিয়াকলাপে হস্তক্ষেপ করার চেষ্টা করে onStop() । এটি অবিচ্ছেদ্যভাবে টুকরো টাকার লেনদেনের সাথে আবদ্ধ নয় তবে অন্যান্য পদ্ধতি যেমন অনব্যাকপ্রেসড ()।

অ্যাসিঙ্কটাস্ক ছাড়াও, এ জাতীয় সমস্যার আরেকটি উত্স হ'ল বাস প্যাটার্নের সাবস্ক্রিপশনের ভুল স্থান। সাধারণত ইভেন্ট বাস বা আরএক্সবাসের সাবস্ক্রিপশনটি ক্রিয়াকলাপের অনক্রিটের সময় নিবন্ধিত হয় এবং অনডাস্ট্রয়ে ডি-নিবন্ধিত হয়। যদি কোনও নতুন কার্যকলাপ শুরু হয় এবং পূর্ববর্তী ক্রিয়াকলাপ থেকে গ্রাহকরা বাধা দেওয়া কোনও ইভেন্ট প্রকাশ করে তবে এটি এই ত্রুটি তৈরি করতে পারে। যদি এটি ঘটে থাকে তবে একটি সমাধান হ'ল সাবস্ক্রিপশন নিবন্ধকরণ এবং ডি-রেজিস্ট্রেশন onStart()এবং এ চলে যাওয়া onStop()


1

এটি আমার সমস্যার সমাধান করেছে: কোটলিন কোড:

val fragmentTransaction = activity.supportFragmentManager.beginTransaction()
fragmentTransaction.add(dialogFragment, tag)
fragmentTransaction.commitAllowingStateLoss()

এর commitAllowingStateLoss()চেয়ে আলাদা কীভাবে commit()?

ডকুমেন্টেশন অনুসারে:

পছন্দ করে commit()তবে কোনও ক্রিয়াকলাপের রাজ্যটি সংরক্ষণের পরে প্রতিশ্রুতি সম্পাদনের অনুমতি দেয়। https://developer.android.com/reference/android/app/FragmentTransaction#commitAllowingStateLoss ()

PS: আপনি খণ্ড ডায়ালগগুলি প্রদর্শন করতে পারেন বা এই পদ্ধতিতে টুকরো লোড করতে পারেন। উভয়ের জন্য প্রযোজ্য।


0

আমার অ্যাপ্লিকেশনটিতে 3 সেকেন্ডে লোডিংয়ের একটি টুকরা রয়েছে, তবে মুঠি স্ক্রিনটি যখন দেখানোর জন্য প্রস্তুত করা হচ্ছে, তখন আমি হোম বোতাম টিপুন এবং এটি চালানো আবার চালু করি, এটি একই ত্রুটি দেখায়, তাই এটি আমার কোডটি সম্পাদনা করে এবং এটি খুব মসৃণভাবে চলেছিল:

new Handler().post(new Runnable() {
        public void run() {
            if (saveIns == null) {
                mFragment = new Fragment_S1_loading();
                getFragmentManager().beginTransaction()
                        .replace(R.id.container, mFragment).commit();
            }
            getActionBar().hide();
            // Loading screen in 3 secs:
            mCountDownTimerLoading = new CountDownTimer(3000, 1000) {

                @Override
                public void onTick(long millisUntilFinished) {

                }

                @Override
                public void onFinish() {
                    if (saveIns == null) {// TODO bug when start app and press home
                                            // button
                        getFragmentManager()
                                .beginTransaction()
                                .replace(R.id.container,
                                        new Fragment_S2_sesstion1()).commitAllowingStateLoss();
                    }
                    getActionBar().show();
                }
            }.start();
        }
    });

দ্রষ্টব্য: কমিটএলিং স্টেটলস () কমিটের পরিবর্তে যুক্ত করুন ()


0

সমর্থন লাইব্রেরি সংস্করণ 24.0.0 থেকে শুরু করে আপনি এমন FragmentTransaction.commitNow()পদ্ধতিতে কল করতে পারেন যা কলটি commit()অনুসরণের পরিবর্তে সিঙ্ক্রোনজভাবে এই লেনদেনটি করেexecutePendingTransactions()


0

ক্রিয়াকলাপটি তার অবস্থা হারিয়ে যাওয়ার পরে আপনি যদি কোনও খণ্ডের লেনদেন করেন তবে অবৈধ স্টেটএক্সেপশন এর মুখোমুখি হ'ল- কার্যকলাপের অগ্রভাগে নেই। আপনি AsyncTask এ বা কোনও নেটওয়ার্কের অনুরোধের পরে কোনও বিভাজন প্রতিশ্রুতিবদ্ধ করার চেষ্টা করার সময় এটি সাধারণত দেখা যায়।

এই ক্রাশটি এড়াতে আপনার কেবলমাত্র ক্রিয়াকলাপের অবস্থা পুনরুদ্ধার না হওয়া অবধি যেকোনো খণ্ডের লেনদেনে বিলম্ব করা উচিত। নিম্নলিখিত এটি কিভাবে সম্পন্ন করা হয়

দুটি বেসরকারী বুলিয়ান ভেরিয়েবল ঘোষণা করুন

public class MainActivity extends AppCompatActivity {

    //Boolean variable to mark if the transaction is safe
    private boolean isTransactionSafe;

    //Boolean variable to mark if there is any transaction pending
    private boolean isTransactionPending;

এখন onPostResume () এবং onPause এ আমরা আমাদের বুলিয়ান ভেরিয়েবল ট্রান্সঅ্যাকশনসেফ সেট এবং আনসেট করি। আইডিয়াটি হ'ল ট্রান্সস্যাকশনটিকে নিরাপদ হিসাবে চিহ্নিত করা হবে যখন ক্রিয়াকলাপটি অগ্রভাগে থাকে তাই স্টেটলাসের কোনও সম্ভাবনা নেই।

/*
onPostResume is called only when the activity's state is completely restored. In this we will
set our boolean variable to true. Indicating that transaction is safe now
 */
public void onPostResume(){
    super.onPostResume();
    isTransactionSafe=true;
}
/*
onPause is called just before the activity moves to background and also before onSaveInstanceState. In this
we will mark the transaction as unsafe
 */

public void onPause(){
    super.onPause();
    isTransactionSafe=false;

}

private void commitFragment(){
    if(isTransactionSafe) {
        MyFragment myFragment = new MyFragment();
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.frame, myFragment);
        fragmentTransaction.commit();
    }
}

আমরা এ পর্যন্ত যা করেছি তা অবৈধ স্টেটএক্সপশন থেকে রক্ষা পাবে তবে ক্রিয়াকলাপ ব্যাকগ্রাউন্ডে চলে যাওয়ার পরে যদি তা করা হয় তবে আমাদের লেনদেনগুলি নষ্ট হয়ে যাবে, যেমন কমিটএলস্টেস্ট্লোস () এর মতো। এটির সাহায্যে আমাদের কাছে ট্রান্সঅ্যাকশনপেন্ডিং বুলিয়ান ভেরিয়েবল রয়েছে

public void onPostResume(){
   super.onPostResume();
   isTransactionSafe=true;
/* Here after the activity is restored we check if there is any transaction pending from
the last restoration
*/
   if (isTransactionPending) {
      commitFragment();
   }
}


private void commitFragment(){

 if(isTransactionSafe) {
     MyFragment myFragment = new MyFragment();
     FragmentManager fragmentManager = getFragmentManager();
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
     fragmentTransaction.add(R.id.frame, myFragment);
     fragmentTransaction.commit();
     isTransactionPending=false;
 }else {
     /*
     If any transaction is not done because the activity is in background. We set the
     isTransactionPending variable to true so that we can pick this up when we come back to
foreground
     */
     isTransactionPending=true;
 }
}

এই নিবন্ধটি কেন এই ব্যতিক্রমের মুখোমুখি হয় এবং এটিকে সমাধানের জন্য বিভিন্ন পদ্ধতির তুলনা করে সে সম্পর্কে বিশদভাবে এই নিবন্ধটি ব্যাখ্যা করেছে। অত্যন্ত বাঞ্ছনীয়


0

আমার একই ব্যতিক্রম ছিল এবং আমি অনেক স্নিপেট চেষ্টা করেছিলাম যা এই স্ট্যাকওভারফ্লো আলোচনায় আমি এখানে পেয়েছি, তবে কোনও স্নিপেট আমার পক্ষে কাজ করেনি।

তবে আমি সমস্ত সমস্যা সমাধান করতে সক্ষম হয়েছি, আমি আপনার সাথে সমাধানগুলি ভাগ করব:

  • প্রথম অংশে: আমি কোনও ক্রিয়াকলাপে ডায়ালগফ্র্যাগমেন্ট দেখানোর চেষ্টা করেছি তবে অন্য জাভা শ্রেণীর কাছ থেকে। তারপরে সেই উদাহরণটির বৈশিষ্ট্যটি পরীক্ষা করে আমি দেখতে পেলাম যে এটি কার্যকলাপের একটি পুরানো উদাহরণ, এটি বর্তমান চলমান ক্রিয়াকলাপ নয়। [আরও সুনির্দিষ্টভাবে আমি सॉকেট.আইও ব্যবহার করছিলাম এবং আমি একটি সকেট.অফ ("উদাহরণ" উদাহরণস্বরূপ) করতে ভুলে গিয়েছিলাম ... সুতরাং এটি ক্রিয়াকলাপের একটি পুরানো উদাহরণের সাথে সংযুক্ত। ]

  • দ্বিতীয় অংশে: আমি যখন কোনও উদ্দেশ্য নিয়ে এটিতে ফিরে আসি তখন আমি একটি ক্রিয়াকলাপে একটি ডায়ালগফ্র্যাগমেন্টটি দেখানোর চেষ্টা করছিলাম, কিন্তু যখন আমি আমার লগগুলি পরীক্ষা করে দেখি তখন আমি দেখেছি যখন এটি খণ্ডটি দেখানোর চেষ্টা করা হয়েছিল তখনও কার্যকলাপটি স্টার্ট পদ্ধতিতে ছিল না , সুতরাং এটি অ্যাপটিকে ক্র্যাশ করেছে কারণ এটি ক্রিয়াকলাপের ক্লাশটিকে এতে খণ্ডগুলি দেখানোর জন্য খুঁজে পায়নি।

কিছু টিপস: আপনি যদি নিজের ক্রিয়াকলাপটি দেখানোর চেষ্টা করছেন যা আপনার ক্রিয়াকলাপের কোনও পুরানো উদাহরণ ব্যবহার না করে থাকেন তবে কিছু অংশের সাথে পরীক্ষা করে দেখুন বা আপনার খণ্ডটি দেখানোর আগে আপনার ক্রিয়াকলাপের জীবনচক্রটি পরীক্ষা করে দেখুন এবং এটি প্রদর্শিত হওয়ার আগে নিশ্চিত হন যে আপনি অন স্টার্টে বা অন রিসুমে রয়েছেন ।

আমি আশা করি এই ব্যাখ্যাগুলি আপনাকে সহায়তা করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.