ClassCastException: android.app.Application

The following is the class that causes the error:

package com.extrasmart; import android.app.Activity; import android.os.Bundle; import android.view.View; //import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.AdapterView.OnItemSelectedListener; public class ActivityImgGrid extends Activity { ExtraSmartApplication application = (ExtraSmartApplication) getApplication(); GridView mGrid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activityimg_grid); mGrid = (GridView) findViewById(R.id.imgGrid); mGrid.setAdapter(new AppsAdapter()); mGrid.setOnItemSelectedListener(new OnItemSelectedListener() { public void onNothingSelected(AdapterView v) { // TODO Auto-generated method stub } public void onItemSelected(AdapterView parent, View v, int position, long id) { ExtraSmartApplication application = (ExtraSmartApplication) getApplication(); application.setSelCategoryIcon(position); setResult(RESULT_OK); finish(); } }); } public class AppsAdapter extends BaseAdapter { ExtraSmartApplication application = (ExtraSmartApplication) getApplication(); private Integer[] imageIDs = application.getCategoryIcons(); public AppsAdapter() { } public View getView(int position, View convertView, ViewGroup parent) { ImageView i; if (convertView == null) { i = new ImageView(ActivityImgGrid.this); //i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutParams(new GridView.LayoutParams(48, 48)); i.setScaleType(ImageView.ScaleType.CENTER_CROP); i.setPadding(5, 5, 5, 5); } else { i = (ImageView) convertView; } i.setImageResource(imageIDs[position]); return i; } public final int getCount() { return imageIDs.length; } public final Object getItem(int position) { return imageIDs[position]; } public final long getItemId(int position) { return position; } } } 

Xml file:

 <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imgGrid" android:layout_width="fill_parent" android:layout_height="fill_parent" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:numColumns="auto_fit" android:columnWidth="48px" android:stretchMode="columnWidth" android:gravity="center" android:minHeight="48px" android:minWidth="48px" /> 

The class used by the ActivityImgGrid class:

 public class ExtraSmartApplication extends Application { //private static final String APP_CREDENTIALS = null; private Integer selCategoryImg; private boolean isCardImageNew = false; private byte[] cardImage = null; private Integer[] categoryImgs = { R.drawable.cricket, R.drawable.football, R.drawable.vollyball }; private boolean isCatCreated = false; public ExtraSmartApplication() { super(); } @Override public void onTerminate() { super.onTerminate(); } public Integer getSelCategoryIcon() { return this.selCategoryImg; } public Integer[] getCategoryIcons() { return this.categoryImgs; } public void setSelCategoryIcon(int position) { this.selCategoryImg = categoryImgs[position]; } public void setCatCreated(boolean isCatCreated) { this.isCatCreated = isCatCreated; } public boolean isCatCreated() { return isCatCreated; } public void setCardImageNew(boolean isCardImageNew) { this.isCardImageNew = isCardImageNew; } public boolean isCardImageNew() { return isCardImageNew; } public void setCardImage(byte[] cardImage) { this.cardImage = cardImage; } public byte[] getCardImage() { return cardImage; } } 
+4
source share
2 answers

It would be better if you could share some snippets of code ...

In any case, when it comes to ClassCastException , it means that you declare a variable of some type and assign it to another type that you defined in the XML layout file ...

for example in xml, which you might have:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:layout_height="wrap_content" android:id="@+id/btn1" android:layout_width="wrap_content"> </Button> </LinearLayout> 

but when connecting the component to the code:

 ImageView img1 = (ImageView)context.findViewById(R.id.btn1); 

This will ClassCastException bcoz, which you push a button into the ImageView variable, which, as you know, is not possible!

If this does not solve your problem, then it would be better if you publish some code fragments after figuring out which code fragment is causing the error!

+2
source
 ExtraSmartApplication application = (ExtraSmartApplication) getApplication(); 

Add

 <application android:icon="@drawable/icon" android:label="@string/app_name" android:name="ExtraSmartApplication"> 

in your Android manifest file.

+23
source

Source: https://habr.com/ru/post/1313596/


All Articles