ClassCastException:android.app.Application

ClassCastException:android.app.Application,android,android-contentprovider,Android,Android Contentprovider,导致错误的类别如下所示: 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; im

导致错误的类别如下所示:

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文件:

<?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"
    />

如果你能分享一些代码片段会更好

无论如何,就
ClassCastException
而言,这意味着您正在声明某种类型的变量,并将其分配给布局xml文件中定义的另一种类型

比如说,, 在xml中,您可能有:

<?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>
这将触发一个
ClassCastException
bcoz,因为您正在向ImageView变量强制转换一个按钮,据您所知,这是不可能的

如果这不能解决您的问题,那么最好在找出导致错误的代码段后发布一些代码段

ExtraSmartApplication application = (ExtraSmartApplication) getApplication(); 
加:



在Android manifest.xml文件中。

您能提供日志片段吗?复制问题的简单代码?关于你的环境的更多细节?谢谢。我解决了这个问题。但是现在我有另一个问题。错误/AndroidRuntime(788):java.lang.RuntimeException:无法启动活动组件信息{com.extrasmart/com.extrasmart.ActivityImgGrid}:java.lang.ClassCastException:android.app.Application错误/AndroidRuntime(788):原因:java.lang.ClassCastException:android.app.Application有什么想法吗?据我所知,我不理解这一行-ExtraSmartApplication=(ExtraSmartApplication)getApplication();据我所知,我不理解这一行-ExtraSmartApplication=(ExtraSmartApplication)getApplication(),以这种方式调用bcoz getApplication时,将返回应用程序的上下文,而不是ExtraSmartApplication类的对象……显而易见的事实总是答案。谢谢Tim。我在Q上为舒尔获得了罕见的
应用程序
ClassCastException
<代码>安卓:名称设置ofc。现在怎么办?
ImageView img1 = (ImageView)context.findViewById(R.id.btn1);
ExtraSmartApplication application = (ExtraSmartApplication) getApplication(); 
<application android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:name="ExtraSmartApplication">