Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扩展BaseAdapter的ApkAdapter类的getView方法中的NullPointerException_Java_Android_Listview_Android Fragments_Nullpointerexception - Fatal编程技术网

Java 扩展BaseAdapter的ApkAdapter类的getView方法中的NullPointerException

Java 扩展BaseAdapter的ApkAdapter类的getView方法中的NullPointerException,java,android,listview,android-fragments,nullpointerexception,Java,Android,Listview,Android Fragments,Nullpointerexception,我正在尝试获取用户安装的android应用程序的列表视图,以显示在我的android应用程序的片段中。我正在使用自定义BaseAdapter填充其项 因为我使用的是片段,所以我遇到了问题 我必须将我的活动转换为片段。我成功地做到了这一点,但在那之后,我的适配器类中出现了运行时错误 06-23 00:40:53.824 23082-23082/com.spicycurryman.getdisciplined10.app E/AndroidRuntime﹕ FATAL EXCEPTION: mai

我正在尝试获取用户安装的android应用程序的列表视图,以显示在我的android应用程序的片段中。我正在使用自定义BaseAdapter填充其项

因为我使用的是片段,所以我遇到了问题

我必须将我的活动转换为片段。我成功地做到了这一点,但在那之后,我的适配器类中出现了运行时错误

06-23 00:40:53.824  23082-23082/com.spicycurryman.getdisciplined10.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.ibc.android.demo.appslist.app.ApkAdapter.getView(ApkAdapter.java:50)
LAYOUTIONFLATOR为第50行,其中is error为

LayoutInflater inflater = (LayoutInflater) convertView.getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
我做了一些调查

并试图遵循这些原则,;然而,解决方案仍然产生了错误

我不知道为什么
convertView==null
总是false

package com.ibc.android.demo.appslist.app;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.spicycurryman.getdisciplined10.app.InstalledAppActivity;
import com.spicycurryman.getdisciplined10.app.R;

import java.util.List;

public class ApkAdapter extends BaseAdapter {

    List<PackageInfo> packageList;
    InstalledAppActivity context;
    PackageManager packageManager;

    public ApkAdapter(InstalledAppActivity context, List<PackageInfo> packageList,
                      PackageManager packageManager) {
        super();
        this.context = context;
        this.packageList = packageList;
        this.packageManager = packageManager;
    }

    private class ViewHolder {
        TextView apkName;
    }

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

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        // LayoutInflator is line 50 where is error is
        LayoutInflater inflater = (LayoutInflater) convertView.getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.installed_apps, null);
            holder = new ViewHolder();

            holder.apkName = (TextView) convertView.findViewById(R.id.appname);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        PackageInfo packageInfo = (PackageInfo) getItem(position);
        Drawable appIcon = packageManager
                .getApplicationIcon(packageInfo.applicationInfo);
        String appName = packageManager.getApplicationLabel(
                packageInfo.applicationInfo).toString();
        appIcon.setBounds(0, 0, 65, 65);
        holder.apkName.setCompoundDrawables(appIcon, null, null, null);
        holder.apkName.setCompoundDrawablePadding(15);
        holder.apkName.setText(appName);

        return convertView;
    }
}
package com.ibc.android.demo.appslist.app;
导入android.content.Context;
导入android.content.pm.PackageInfo;
导入android.content.pm.PackageManager;
导入android.graphics.drawable.drawable;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.TextView;
导入com.spicycurryman.getStructed10.app.InstalledAppActivity;
导入com.spicycurryman.getstructed10.app.R;
导入java.util.List;
公共类ApkAdapter扩展BaseAdapter{
包装商名单;
InstalledAppActivity上下文;
包装管理器包装管理器;
公共ApkAdapter(InstalledAppActivity上下文、列表packageList、,
软件包管理器(软件包管理器){
超级();
this.context=上下文;
this.packageList=packageList;
this.packageManager=packageManager;
}
私有类视窗持有者{
文本视图;
}
public int getCount(){
返回packageList.size();
}
公共对象getItem(int位置){
返回包装商。获取(位置);
}
公共长getItemId(int位置){
返回0;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
//LAYOUTIONFLATOR为第50行,其中is error为
LayoutFlater充气器=(LayoutFlater)convertView.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
if(convertView==null){
convertView=充气机。充气(R.layout.installed_apps,null);
holder=新的ViewHolder();
holder.apkName=(TextView)convertView.findViewById(R.id.appname);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
PackageInfo PackageInfo=(PackageInfo)获取项目(位置);
可绘制的appIcon=packageManager
.getApplicationInfo(packageInfo.applicationInfo);
字符串appName=packageManager.getApplicationLabel(
packageInfo.applicationInfo.toString();
appIcon.setBounds(0,0,65,65);
holder.apkName.setCompoundDrawables(appIcon,null,null);
支架.附件.设置复合可拉伸衬垫(15);
holder.apkName.setText(appName);
返回视图;
}
}
这是我的片段类:

package com.spicycurryman.getdisciplined10.app;

import android.support.v4.app.Fragment;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

import com.ibc.android.demo.appslist.app.ApkAdapter;

import java.util.ArrayList;
import java.util.List;



public class InstalledAppActivity extends Fragment
        implements OnItemClickListener {

    PackageManager packageManager;
    ListView apkList;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        View rootView = inflater.inflate(R.layout.installed_apps, container, false);
        packageManager = getActivity().getPackageManager();
        List<PackageInfo> packageList = packageManager
                .getInstalledPackages(PackageManager.GET_PERMISSIONS);

        List<PackageInfo> packageList1 = new ArrayList<PackageInfo>();

        /*To filter out System apps*/
        for(PackageInfo pi : packageList) {
            boolean b = isSystemPackage(pi);
            if(!b) {
                packageList1.add(pi);
            }
        }
        apkList = (ListView) rootView.findViewById(R.id.applist);
        apkList.setAdapter(new ApkAdapter(this, packageList1, packageManager));

        apkList.setOnItemClickListener(this);

        return rootView;

    }

    /**
     * Return whether the given PackgeInfo represents a system package or not.
     * User-installed packages (Market or otherwise) should not be denoted as
     * system packages.
     *
     * @param pkgInfo
     * @return boolean
     */
    private boolean isSystemPackage(PackageInfo pkgInfo) {
        return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true
                : false;
    }


// Don't need in Fragment
 /*   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.block, menu);
        return true;
    }*/

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

    }
}
package com.spicycurryman.getstructed10.app;
导入android.support.v4.app.Fragment;
导入android.content.pm.ApplicationInfo;
导入android.content.pm.PackageInfo;
导入android.content.pm.PackageManager;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListView;
导入com.ibc.android.demo.appslist.app.ApkAdapter;
导入java.util.ArrayList;
导入java.util.List;
公共类InstalledAppActivity扩展了片段
实现MClickListener{
包装管理器包装管理器;
列表视图apkList;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
View rootView=充气机。充气(R.layout.installed_apps,container,false);
packageManager=getActivity().getPackageManager();
列表packageList=packageManager
.getInstalledPackages(PackageManager.GET_权限);
List packageList1=new ArrayList();
/*筛选出系统应用程序*/
for(PackageInfo pi:包装商){
布尔b=isSystemPackage(pi);
如果(!b){
包装商1.添加(pi);
}
}
apkList=(ListView)rootView.findviewbyd(R.id.applist);
apkList.setAdapter(新的ApkAdapter(此为packageList1,packageManager));
apkList.setOnItemClickListener(this);
返回rootView;
}
/**
*返回给定的PackgeInfo是否表示系统包。
*用户安装的软件包(市场或其他)不应表示为
*系统包。
*
*@param pkgInfo
*@返回布尔值
*/
私有布尔值isSystemPackage(PackageInfo pkgInfo){
返回((pkgInfo.applicationInfo.flags和applicationInfo.FLAG_SYSTEM)!=0)?真
:假;
}
//不需要碎片
/*@覆盖
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.block,menu);
返回true;
}*/
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
}
}
请记住,InstalledAppActivity是一个片段

编辑:

以下是我的更新错误

更改此选项

  apkList.setAdapter(new ApkAdapter(this, packageList1, packageManager));

片段中的此
未引用有效上下文

然后在构造函数中

public ApkAdapter(Context context, List<PackageInfo> packageList,
                  PackageManager packageManager) {
    super();
    inflater = LayoutInflater.from(context); // can initialize here 
public ApkAdapter(上下文、列表打包师、,
软件包管理器(软件包管理器){
超级();
充气器=LayoutInflater.from(context);//可以在这里初始化
更改此选项

  apkList.setAdapter(new ApkAdapter(this, packageList1, packageManager));

这是片段doe中的
public ApkAdapter(Context context, List<PackageInfo> packageList,
                  PackageManager packageManager) {
    super();
    inflater = LayoutInflater.from(context); // can initialize here 
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );