Search code examples
androidandroid-intentvideoandroid-viewpagerandroid-tabhost

Intent with video play after application crash in some of device like samsung galaxy Quarto


I am trying to play video with intent for device video player, with Url video and internal video play, but problem is when i played any video, it is played successfully but at white returning to the application screen,application get crashed.

In My application i used tabhost with viewpager for swaping tabs and it has (tabhost) four tabs with fragments.

Tabhost code

    mTabHost = (TabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup();
    TabInfo tabInfo = null;
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab1").setIndicator("Tab1"),
            (tabInfo = new TabInfo("Tab1", Tab1.class, args)));
    this.mapTabInfo.put(tabInfo.tag, tabInfo);
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab2").setIndicator("Tab2"),
            (tabInfo = new TabInfo("Tab2", Tab2.class, args)));
    this.mapTabInfo.put(tabInfo.tag, tabInfo);
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab3").setIndicator("Tab3"),
            (tabInfo = new TabInfo("Tab3", Tab3.class, args)));
    this.mapTabInfo.put(tabInfo.tag, tabInfo);
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab4").setIndicator("Tab4"),
            (tabInfo = new TabInfo("Tab4", Tab4.class, args)));
    this.mapTabInfo.put(tabInfo.tag, tabInfo);

Viewpager Code

List<Fragment> fragments = new Vector<Fragment>();
    fragments.add(Fragment.instantiate(this, Tab1.class.getName()));
    fragments.add(Fragment.instantiate(this, Tab2.class.getName()));
    fragments.add(Fragment.instantiate(this, Tab3.class.getName()));
    fragments.add(Fragment.instantiate(this, Tab4.class.getName()));
    this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);
    //
    this.mViewPager = (ViewPager) super.findViewById(R.id.viewpager);
    this.mViewPager.setAdapter(this.mPagerAdapter);
    this.mViewPager.setOnPageChangeListener(this);
    this.mPagerAdapter.notifyDataSetChanged();

Now i am playing particular url video from custom listview data. When tab2 in playing that video,

Video play code

                 Uri uri = Uri.parse(video_url.get(position));
                 Intent intent = new Intent();
                 intent.setAction(Intent.ACTION_VIEW);
                 intent.setDataAndType(uri, "video/mp4");
                 context.startActivity(intent);

At last i am getting error at particular line that code below,

    this.initialiseTabHost(savedInstanceState);
    if (savedInstanceState != null) {
        mTabHost.setCurrentTabByTag(savedInstanceState.getString("Tab2")); 
    }
    // Intialise ViewPager
    this.intialiseViewPager();
    }

   protected void onSaveInstanceState(Bundle outState) {
    outState.putString("Tab2", mTabHost.getCurrentTabTag()); 
    super.onSaveInstanceState(outState);
   }

OnTabChange Lister In detect Problem

     TabInfo newTab = this.mapTabInfo.get(tag);
     int pos = this.mTabHost.getCurrentTab();
     this.mViewPager.setCurrentItem(pos);
     this.mViewPager.setOffscreenPageLimit(4);

Crash log below

10-15 13:27:33.612: E/AndroidRuntime(21790): FATAL EXCEPTION: main
10-15 13:27:33.612: E/AndroidRuntime(21790): java.lang.RuntimeException:   Unable to start activity ComponentInfo{com.myapp/com.myapp.MainActivity}: java.lang.NullPointerException
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2114)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2139)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.app.ActivityThread.access$700(ActivityThread.java:143)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.os.Looper.loop(Looper.java:137)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.app.ActivityThread.main(ActivityThread.java:4960)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at java.lang.reflect.Method.invokeNative(Native Method)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at java.lang.reflect.Method.invoke(Method.java:511)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at dalvik.system.NativeStart.main(Native Method)
10-15 13:27:33.612: E/AndroidRuntime(21790): Caused by: java.lang.NullPointerException
10-15 13:27:33.612: E/AndroidRuntime(21790):    at com.myapp.MainActivity.onTabChanged(MainActivity.java:354)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:401)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.widget.TabHost.setCurrentTab(TabHost.java:386)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.widget.TabHost.setCurrentTabByTag(TabHost.java:293)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at com.myapp.MainActivity.onCreate(MainActivity.java:217)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.app.Activity.performCreate(Activity.java:5203)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
10-15 13:27:33.612: E/AndroidRuntime(21790):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2078)
10-15 13:27:33.612: E/AndroidRuntime(21790):    ... 11 more

Solution

  • Finnaly i got solution from group chat, i have to change below code,

        this.initialiseTabHost(savedInstanceState);
        if (savedInstanceState != null) {
            mTabHost.setCurrentTabByTag(savedInstanceState.getString("Tab2")); 
        }
        // Intialise ViewPager
        this.intialiseViewPager();
        }
        protected void onSaveInstanceState(Bundle outState) {
        outState.putString("Tab2", mTabHost.getCurrentTabTag()); 
        super.onSaveInstanceState(outState);
        }
    

    New code is

    this.initialiseTabHost(savedInstanceState);
    // Intialise ViewPager
    this.intialiseViewPager();
    if (savedInstanceState != null) {
        mTabHost.setCurrentTabByTag(savedInstanceState.getString("Tab2")); 
    }
    
    }
    protected void onSaveInstanceState(Bundle outState) {
    outState.putString("Tab2", mTabHost.getCurrentTabTag()); 
    super.onSaveInstanceState(outState);
    }