2016-08-05 2 views
-1
i just get references from net and update code in android.means get application context from anywhere.but its always show class cast exeption i dont knoew how to use in adapter/activity,fragments 
    please anyone know about this share your view/thoughts 

    Applicationcontext.java 
     package com.example.admin.myapplication; 

     import android.app.Application; 
     import android.content.Context; 

     import com.example.admin.myapplication.models.ParsedApplicationSettings; 

     public class ApplicationContext extends Application { 

      /** 
      * The settings obtained after parsing the XML file 
      */ 
      public ParsedApplicationSettings mParsedApplicationSettings = null; 
      private static Context context; 

      public ParsedApplicationSettings getParsedApplicationSettings() { 
       return mParsedApplicationSettings; 
      } 

      /** 
      * Setter for ParsedApplicationSettings 
      * 
      * @param parsedApplicationSettings 
      *   the parsed XML settings to set for the applicationContext; 
      */ 
      public void setParsedApplicationSettings(
        ParsedApplicationSettings parsedApplicationSettings) { 
       this.mParsedApplicationSettings = parsedApplicationSettings; 
      } 

     } 

    Mainactivity.java 
    basically in this activity i have implement navigation drawer. i used entire application context to single state class.but whenever i use that application context always show classcast exception,nullpointer execption 
    package com.example.admin.myapplication.fragments; 
    i use get this code from net and i dont have 2 much knoewlage about android deep 
basically in this activity i have implement navigation drawer. i used entire application context to single state class.but whenever i use that application context always show classcast exception,nullpointer execption 
    package com.example.admin.myapplication.fragments; 
    i use get this code from net and i dont have 2 much knoewlage about android deep 
...sorry for poor english 

    import android.app.Activity; 
    import android.content.Context; 
    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.support.v4.view.ViewPager; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.ImageView; 
    import android.widget.RelativeLayout; 

    import com.example.admin.myapplication.ApplicationContext; 
    import com.example.admin.myapplication.MainActivity; 
    import com.example.admin.myapplication.R; 
    import com.example.admin.myapplication.adapters.HomeFragmentViewPagerAdapter; 
    import com.example.admin.myapplication.models.MainPageSettings; 


    public class HomeFragment extends Fragment { 

     public static final String TAG = HomeFragment.class.getSimpleName(); 

     public interface ActionListener { 
      void onReservationButtonClicked(); 

      void onRatesButtonClicked(); 

      void onGalleryButtonClicked(); 

      void onRoomsButtonClicked(); 

      void onFacilitiesButtonClicked(); 

      void onLocationsButtonClicked(); 
     } 

     private android.support.v4.view.ViewPager mViewPager; 

     private RelativeLayout mReservationButton; 
     private RelativeLayout mRatesButton; 
     private RelativeLayout mGalleryButton; 
     private RelativeLayout mRoomsButton; 
     private RelativeLayout mFacilitiesButton; 
     private RelativeLayout mLocationsButton; 

     private ActionListener mActionListener; 

     private ApplicationContext mAppContext=new ApplicationContext(); 

     public HomeFragment() { 
      super(); 
     } 

     public static HomeFragment newInstance(ApplicationContext appContext, 
       ActionListener actionListener) { 

      if (actionListener == null) { 
       throw new IllegalArgumentException(ActionListener.class.getName() 
         + " is null!"); 
      } 
      HomeFragment fragment = new HomeFragment(); 
      fragment.mActionListener = actionListener; 
      fragment.mAppContext = appContext; 
      return fragment; 
     } 

     @Override 
     public void onAttach(Activity activity) { 
      super.onAttach(activity); 

     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_main, container, false); 

      mViewPager = (ViewPager) view.findViewById(R.id.mainFragmentViewPager); 

      MainPageSettings mainPageSettings = mAppContext 
        .getParsedApplicationSettings().getMainPageSettings(); 

      HomeFragmentViewPagerAdapter adapter = new HomeFragmentViewPagerAdapter(
        mAppContext, mainPageSettings.getMainPreviewPictures()); 
      mViewPager.setAdapter(adapter); 
    // 
    //  CirclePageIndicator circleIndicator = (CirclePageIndicator) view 
    //    .findViewById(R.id.mainFragmentViewPagerBullets); 
    //  circleIndicator.setRadius(MainActivity.dipsToPixels(mAppContext, 8)); 
    //  circleIndicator.setViewPager(mViewPager); 

      ImageView rightButton = (ImageView) view 
        .findViewById(R.id.mainFragmentViewPagerRightButton); 
      rightButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        if (mViewPager.getAdapter() != null 
          && mViewPager.getAdapter().getCount() > mViewPager 
            .getCurrentItem()) { 
         mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); 
        } 
       } 
      }); 

      ImageView leftButton = (ImageView) view 
        .findViewById(R.id.mainFragmentViewPagerLeftButton); 

      leftButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        if (mViewPager.getAdapter() != null 
          && mViewPager.getCurrentItem() > 0) { 
         mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1); 
        } 
       } 
      }); 

      if (mViewPager.getAdapter() != null 
        && mViewPager.getAdapter().getCount() < 2) { 
       leftButton.setVisibility(View.GONE); 
       rightButton.setVisibility(View.GONE); 
      } else { 
       leftButton.setVisibility(View.VISIBLE); 
       rightButton.setVisibility(View.VISIBLE); 
      } 

      mReservationButton = (RelativeLayout) view 
        .findViewById(R.id.mainFragmentButtonsContainerFirstRowReservationButton); 
      mReservationButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        mActionListener.onReservationButtonClicked(); 
       } 
      }); 
      mRoomsButton = (RelativeLayout) view 
        .findViewById(R.id.mainFragmentButtonsContainerFirstRowRoomsButton); 
      mRoomsButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        mActionListener.onRoomsButtonClicked(); 
       } 
      }); 

      mRatesButton = (RelativeLayout) view 
        .findViewById(R.id.mainFragmentButtonsContainerSecondRowRatesButton); 
      mRatesButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        mActionListener.onRatesButtonClicked(); 
       } 
      }); 

      mFacilitiesButton = (RelativeLayout) view 
        .findViewById(R.id.mainFragmentButtonsContainerSecondRowFacilitiesButton); 
      mFacilitiesButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        mActionListener.onFacilitiesButtonClicked(); 
       } 
      }); 

      mGalleryButton = (RelativeLayout) view 
        .findViewById(R.id.mainFragmentButtonsContainerThirdRowGalleryButton); 
      mGalleryButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        mActionListener.onGalleryButtonClicked(); 
       } 
      }); 

      mLocationsButton = (RelativeLayout) view 
        .findViewById(R.id.mainFragmentButtonsContainerThirdRowLocationsButton); 
      mLocationsButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        mActionListener.onLocationsButtonClicked(); 
       } 
      }); 

      return view; 
     } 
    } 


     locat 
     this module showing error of code that is occuring after execution of application 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.admin.myapplication/com.example.admin.myapplication.MainActivity}: java.lang.ClassCastException: android.app.Application cannot be cast to com.example.admin.myapplication.ApplicationContext 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
                  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:135) 
                  at android.app.ActivityThread.main(ActivityThread.java:5221) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:372) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
                  Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.example.admin.myapplication.ApplicationContext 
                  at com.example.admin.myapplication.MainActivity.onCreate(MainActivity.java:70) 
                  at android.app.Activity.performCreate(Activity.java:5933) 
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)  
                  at android.app.ActivityThread.access$800(ActivityThread.java:144)  
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)  
                  at android.os.Handler.dispatchMessage(Handler.java:102)  
                  at android.os.Looper.loop(Looper.java:135)  
                  at android.app.ActivityThread.main(ActivityThread.java:5221)  
                  at java.lang.reflect.Method.invoke(Native Method)  
                  at java.lang.reflect.Method.invoke(Method.java:372)  
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)  
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)  


Home_fragment.java(fragment) 
this is the first fragment of slider menu which is showing on the top viewpager and in bottom menus(rooms,reservation.....).viewpager slide images whenever user click on menus show particular fragment 
all menus are fragments, 

zu verwenden, ich weiß nicht, warum diese Art von Fehler occur.i alle Instanz definieren passieren richtig bitte Sir chcek dies ist das erste Fragment des Slider-Menüs, das auf dem oberen Viewpager und in den unteren Menüs (Räume, Reservierungen ...) angezeigt wird. viewpager slide images, wann immer Benutzer auf Menüs klicken, zeigen bestimmtes Fragment an alle Menüs sind Fragmente, public class HomeFragment extends Fragment {android get Anwendungskontext von überall, aber seine zeigen immer Klasse Guss exeption i knoew nicht, wie

public static final String TAG = HomeFragment.class.getSimpleName(); 

    public interface ActionListener { 
     void onReservationButtonClicked(); 

     void onRatesButtonClicked(); 

     void onGalleryButtonClicked(); 

     void onRoomsButtonClicked(); 

     void onFacilitiesButtonClicked(); 

     void onLocationsButtonClicked(); 
    } 

    private android.support.v4.view.ViewPager mViewPager; 

    private RelativeLayout mReservationButton; 
    private RelativeLayout mRatesButton; 
    private RelativeLayout mGalleryButton; 
    private RelativeLayout mRoomsButton; 
    private RelativeLayout mFacilitiesButton; 
    private RelativeLayout mLocationsButton; 

    private ActionListener mActionListener; 

    private ApplicationContext mAppContext; 

    public HomeFragment() { 
     super(); 
    } 

    public static HomeFragment newInstance(ApplicationContext appContext, 
      ActionListener actionListener) { 

     if (actionListener == null) 
     { 
      throw new IllegalArgumentException(ActionListener.class.getName() 
        + " is null!"); 
     } 
     HomeFragment fragment = new HomeFragment(); 
     fragment.mActionListener = actionListener; 
     fragment.mAppContext = appContext; 
     return fragment; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) 
    { 
     View view = inflater.inflate(R.layout.fragment_main, container, false); 
     mViewPager = (ViewPager) view.findViewById(R.id.mainFragmentViewPager); 
// 
     MainPageSettings mainPageSettings = mAppContext 
       .getParsedApplicationSettings().getMainPageSettings(); 
     HomeFragmentViewPagerAdapter adapter = new HomeFragmentViewPagerAdapter(
       mAppContext, mainPageSettings.getMainPreviewPictures()); 
     mViewPager.setAdapter(adapter); 

     CirclePageIndicator circleIndicator = (CirclePageIndicator) view 
       .findViewById(R.id.mainFragmentViewPagerBullets); 
     circleIndicator.setRadius(MainActivity.dipsToPixels(mAppContext, 8)); 
     circleIndicator.setViewPager(mViewPager); 

     ImageView rightButton = (ImageView) view 
       .findViewById(R.id.mainFragmentViewPagerRightButton); 
     rightButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) 
      { 
       if (mViewPager.getAdapter() != null 
         && mViewPager.getAdapter().getCount() > mViewPager 
           .getCurrentItem()) 
       { 
        mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); 
       } 
      } 
     }); 

     ImageView leftButton = (ImageView) view 
       .findViewById(R.id.mainFragmentViewPagerLeftButton); 

     leftButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (mViewPager.getAdapter() != null 
         && mViewPager.getCurrentItem() > 0) { 
        mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1); 
       } 
      } 
     }); 

     if (mViewPager.getAdapter() != null 
       && mViewPager.getAdapter().getCount() < 2) { 
      leftButton.setVisibility(View.GONE); 
      rightButton.setVisibility(View.GONE); 
     } else { 
      leftButton.setVisibility(View.VISIBLE); 
      rightButton.setVisibility(View.VISIBLE); 
     } 

     mReservationButton = (RelativeLayout) view 
       .findViewById(R.id.mainFragmentButtonsContainerFirstRowReservationButton); 
     mReservationButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       mActionListener.onReservationButtonClicked(); 
      } 
     }); 
     mRoomsButton = (RelativeLayout) view 
       .findViewById(R.id.mainFragmentButtonsContainerFirstRowRoomsButton); 
     mRoomsButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       mActionListener.onRoomsButtonClicked(); 
      } 
     }); 

     mRatesButton = (RelativeLayout) view 
       .findViewById(R.id.mainFragmentButtonsContainerSecondRowRatesButton); 
     mRatesButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       mActionListener.onRatesButtonClicked(); 
      } 
     }); 

     mFacilitiesButton = (RelativeLayout) view 
       .findViewById(R.id.mainFragmentButtonsContainerSecondRowFacilitiesButton); 
     mFacilitiesButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       mActionListener.onFacilitiesButtonClicked(); 
      } 
     }); 

     mGalleryButton = (RelativeLayout) view 
       .findViewById(R.id.mainFragmentButtonsContainerThirdRowGalleryButton); 
     mGalleryButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       mActionListener.onGalleryButtonClicked(); 
      } 
     }); 

     mLocationsButton = (RelativeLayout) view 
       .findViewById(R.id.mainFragmentButtonsContainerThirdRowLocationsButton); 
     mLocationsButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       mActionListener.onLocationsButtonClicked(); 
      } 
     }); 

     return view; 
    } 
updated second logcat 
this second updqated logcat showing error of home_fragment 
that showing error on first fragment 
this second updqated logcat showing error of home_fragment 
that showing error on first fragment 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.example.admin.myapplication.models.MainPageSettings com.example.admin.myapplication.models.ParsedApplicationSettings.getMainPageSettings()' on a null object reference 
                at com.example.admin.myapplication.fragments.HomeFragment.onCreateView(HomeFragment.java:90) 
                at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1234) 
                at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2046) 
                at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:174) 
                at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597) 
                at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220) 
                at android.app.Activity.performStart(Activity.java:5949) 
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261) 
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)  
                at android.app.ActivityThread.access$800(ActivityThread.java:144)  
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)  
                at android.os.Handler.dispatchMessage(Handler.java:102)  
                at android.os.Looper.loop(Looper.java:135)  
                at android.app.ActivityThread.main(ActivityThread.java:5221)  
                at java.lang.reflect.Method.invoke(Native Method)  
+1

Haben Sie registriert Sie Anwendungsklasse in manifestieren? Was ist der Code in 'MainActivity' Zeile 70? – Shaishav

+0

ich aktualisierten Code Herr bitte überprüfen..regsiter in Manifest-Datei – sumit

+0

https://drive.google.com/file/d/0BwBamLZiZbqfUWJVYUtoNmpVVGM/view?ts=57a3470a – sumit

Antwort

0

Stellen Sie zunächst sicher, dass Sie Ihre ApplicationContext in manist Datei unter android:name Tag registrieren. Zweitens ist das Problem, das mit Ihrem Code zu sein scheint, ist diese Zeile:

private ApplicationContext mAppContext=new ApplicationContext(); 

Hier sind Sie im Grunde eine neue Instanz Ihrer Anwendungsklasse zu schaffen. Dies ist nicht erforderlich, da, wenn Ihre Anwendungsklasse im Manifest registriert ist, automatisch eine Instanz dieser Klasse erstellt wird. Darüber hinaus glaube ich, dass Sie einige der Referenz der context haben möchten. Tun Sie etwas wie folgt aus:

private Context mContext; 

Dann in Ihrem newInstance get Zusammenhang wie folgt:

public static HomeFragment newInstance(Context context, 
      ActionListener actionListener) { 
    ... 
    mContext = context; 
    ... 
} 

Sie rufen diese Methode als:

HomeFragment.newInstance(getApplicationContext(), listener); 
+0

zu definieren, aber Sir im Falle von Fragment wird es show error – sumit

+0

Sie müssen keine neue Anwendungsklasseninstanz erstellen. Über welchen Fehler redest du? – Shaishav

+0

java.lang.NullPointerException: Versuch, die virtuelle Methode 'java.lang.Object android.content.Context.getSystemService (java.lang.String)' für eine Nullobjekt-Referenz unter android.view.LayoutInflater.from (LayoutInflater. java: 219) – sumit

0

I t Was Sie erreichen möchten, ist, dass Sie den Kontext für den Anwendungs-Build als statisch festlegen, damit Sie überall in der Anwendung darauf zugreifen können.

public class App extends Application { 
    private static final String TAG = PubApp.class.getSimpleName(); 

    private static App instance; 

    public static Context getAppContext(){ 
     return instance.getApplicationContext(); 
    } 

    @Override 
    public void onCreate() { 
     instance = this; 
     super.onCreate(); 
    } 
} 

Und Sie haben die Anwendungsklasse im Manifest <application> Element zu registrieren.

<application 
android:name=".App" 
... 
</application> 
+0

Das ist fast immer eine schlechte Idee – Shaishav

+0

so Sir sein manatory in Manifest-Datei – sumit

Verwandte Themen