Rectifying a logcat error “Attempt to write to null array”

匿名 (未验证) 提交于 2019-12-03 01:12:01

问题:

I am writing a very Basic Home Launcher, I have made a class AppsInfoModel, a CustomAdapter and a GridView in AppsGridActivity.

Here is my code for populating the adapter in Activity

    appsGrid = (GridView) findViewById(R.id.appsGrid);     appsInfo = new AppsInfoModel(this);     appsGrid.setAdapter(new CustomAdapter(this,appsInfo)); 

Here is adapter

public class CustomAdapter extends BaseAdapter {  Context context; AppsInfoModel appInfo; CustomAdapter(Context context,AppsInfoModel appInfo) {     this.context = context;     this.appInfo = appInfo; }  @Override public int getCount() {     return appInfo.getSize(); }  @Override public Object getItem(int position) {     return appInfo.getItem(position); }  @Override public long getItemId(int position) {     return position; }  @Override public View getView(int position, View convertView, ViewGroup parent) {     if (convertView == null) {         LayoutInflater inflater = ((Activity) context).getLayoutInflater();         convertView = inflater.inflate(R.layout.single_grid, parent, false);          ImageView icon = (ImageView) convertView.findViewById(R.id.app_icon);         icon.setImageDrawable(appInfo.getIcon(position));          TextView label = (TextView) convertView.findViewById(R.id.app_label);         label.setText(appInfo.getLabel(position));         return convertView;     }     else         return convertView; } 

}

And Model class

public class AppsInfoModel { String label[]; String name[]; Drawable icon[]; PackageManager pm; List<ResolveInfo> appsInfo;  AppsInfoModel(Context context){     pm=context.getPackageManager();     appsInfo = pm.queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), 0);     for(int i=0;i<appsInfo.size();i++){         label[i]= (appsInfo.get(i).loadLabel(pm)).toString();//***This is where problem lies according to LogCat***         name[i]= (appsInfo.get(i)).activityInfo.packageName;         icon[i]=(appsInfo.get(i)).activityInfo.loadIcon(pm);     } }  Drawable getIcon(int i){     return icon[i]; }  String getLabel(int i){     return label[i]; }  String getPackageName(int i){     return name[i]; } int getSize(){     return appsInfo.size(); }  public ResolveInfo getItem(int i) {     return appsInfo.get(i); } } 

And Here is the Logcat error

Why is it occuring? what is the problem with the logic or syntax.

回答1:

Based on the code you posted, you aren't initializing these arrays:

String label[]; String name[]; Drawable icon[]; 

You should do something like this:

AppsInfoModel(Context context){     pm=context.getPackageManager();     appsInfo = pm.queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER), 0);      label = new String[appsInfo.size()];     name = new String[appsInfo.size()];     icon = new Drawable[appsInfo.size()];     for(int i=0;i<appsInfo.size();i++){         label[i]= (appsInfo.get(i).loadLabel(pm)).toString();         name[i]= (appsInfo.get(i)).activityInfo.packageName;         icon[i]=(appsInfo.get(i)).activityInfo.loadIcon(pm);     } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!