Error:This class should provide a default constructor (a public constructor with no arguments) [Instantiatable] in Android

Error:This class should provide a default constructor (a public constructor with no arguments) [Instantiatable] in Android

我正在 Android Studio 中使用生成的签名 APK 生成文件 apk,但出现此错误:

Error:Error: This class should provide a default constructor (a public constructor with no arguments) (com.actua.actuaconsultores.actuamindfulness.GridImagenAdaptar) [Instantiatable]

我的class是:

public class GridImagenAdaptar extends BaseAdapter {

    private final Context mContext;
    private final ArrayList<ModelImage> mGridItems;

    public GridImagenAdaptar(Context mContext, ArrayList<ModelImage> mGridItems) {
        this.mContext = mContext;
        this.mGridItems = mGridItems;
    }

    public int getCount() {
        return mGridItems.size();
    }

    public Object getItem(int position) {
        return mGridItems.get(position);
    }

    public long getItemId(int position) {
        return position;
    }


    public View getView(int position, View convertView, ViewGroup parent)
    {
        if( convertView == null)
        {   // If ReusedView doesn't exist
            convertView = inflatedViewWithContextInParentView(R.layout.activity_grid_imagen_adaptar, mContext, parent);

            convertView.setTag("HomeMenuCell"); // Reuse Identifier
        }

        fillViewWithItemAtIndex(convertView, position);

        return convertView;
    }

    private View inflatedViewWithContextInParentView(int id, Context context, ViewGroup parentView)
    {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Service.LAYOUT_INFLATER_SERVICE);
        View inflatedView = inflater.inflate(id, parentView, false);
        return inflatedView;
    }

    private void fillViewWithItemAtIndex(View reusedView, int index)
    {
        ModelImage item = mGridItems.get(index);
        item.setId(index);

        TextView title = (TextView) reusedView.findViewById(R.id.title);
        title.setText(item.title);

        ImageView picture = (ImageView) reusedView.findViewById(R.id.image);
        int resourceID = getIDForResourceName(item.imageName);
        picture.setImageResource(resourceID);
    }

    private int getIDForResourceName(String name)
    {
        try {
            Class res = R.drawable.class;
            Field field = res.getField(name);
            int drawableId = field.getInt(null);
            return drawableId;
        }
        catch (Exception e) {
            Log.e("GridItemsAdapter", "Error: Couldn't get a drawable id.", e);
        }
        return -1;
    }
}

有什么问题?

谢谢

此错误意味着您必须添加:

public GridImagenAdaptar(){}

你的class,和你的构造者。

AndroidManifest.xml文件中检查一下,一定有额外的class行不小心添加了,只需删除或更改class名称就可以了。例如,在我的例子中,它是这样添加的 ParyllService,我将其删除以使其正常工作。

 <!--  was uncessary <service
        android:name=".services.finance.payroll.PayrollService"
        android:enabled="true"
        android:exported="true"></service>-->

解决方案也可以是 class 参数的默认值(而不是删除它们)。 我在 Kotlin class 中遇到了同样的问题,它必须在 AndroidManifest.xml 中,因为它是 Activity class,此外 class 必需参数(ID 号用于 list-detail 处理)。清单中的错误是相同的 这个 class 应该提供一个默认构造函数(一个 public 没有参数的构造函数) 甚至 [=28] 也不可能=] 应用程序。唯一需要解决的问题是为构造函数参数添加默认值(并在 class 中稍微处理一下):

class ArticleDetail(id: Long): AppCompatActivity() {...

进入

class ArticleDetail(id: Long = -1): AppCompatActivity() {

定义一个public空的构造函数,就是添加这一行:

public GridImagenAdaptar (){};数组列表声明后