Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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 包管理器初始化的null指针异常_Java_Android_Nullpointerexception - Fatal编程技术网

Java 包管理器初始化的null指针异常

Java 包管理器初始化的null指针异常,java,android,nullpointerexception,Java,Android,Nullpointerexception,我一直试图在点击按钮时显示已安装应用程序的列表,但软件包管理器抛出了一个空指针异常 这是我的java类,它在单击时被调用 import android.app.ListActivity; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawab

我一直试图在点击按钮时显示已安装应用程序的列表,但软件包管理器抛出了一个空指针异常

这是我的java类,它在单击时被调用

import android.app.ListActivity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

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


public class AppList extends AppCompatActivity {

PackageManager packman = getPackageManager();
List<ApplicationInfo> apps = packman.getInstalledApplications(0);
ListView applist;
List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_app_list);

    applist = (ListView)findViewById(R.id.listView);

    for(ApplicationInfo app : apps) {
        //checks for flags; if flagged, check if updated system app
        if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
            installedApps.add(app);
            //it's a system app, not interested
        } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
            //Discard this one
            //in this case, it should be a user-installed app
        } else {
            installedApps.add(app);
        }
    }


    CustomAdapter custom = new CustomAdapter();

    applist.setAdapter(custom);


}

class CustomAdapter extends BaseAdapter
{

    @Override
    public int getCount() {
        return installedApps.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        convertView = getLayoutInflater().inflate(R.layout.single_row,null);
        ImageView app_face = (ImageView)convertView.findViewById(R.id.app_face);
        TextView app_name = (TextView)convertView.findViewById(R.id.app_name);

        Drawable face = packman.getApplicationIcon(apps.get(position));
        String label = (String)packman.getApplicationLabel(apps.get(position));

        app_face.setImageDrawable(face);
        app_name.setText(label);

        return convertView;
    }
}
}
导入android.app.ListActivity;
导入android.content.Context;
导入android.content.pm.ApplicationInfo;
导入android.content.pm.PackageManager;
导入android.graphics.drawable.drawable;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
导入java.util.ArrayList;
导入java.util.List;
公共类应用程序列表扩展了AppCompative活动{
PackageManager packman=getPackageManager();
列表应用程序=packman.getInstalledApplications(0);
列表视图应用程序列表;
List installedApps=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u app\u列表);
applist=(ListView)findViewById(R.id.ListView);
用于(应用程序信息应用程序:应用程序){
//检查标志;如果已标记,则检查是否已更新系统应用程序
如果((app.flags和ApplicationInfo.FLAG\u UPDATED\u SYSTEM\u app)!=0){
installedApps.add(应用程序);
//这是一个系统应用程序,不感兴趣
}else if((app.flags和ApplicationInfo.FLAG\u系统)!=0){
//丢弃这个
//在这种情况下,它应该是用户安装的应用程序
}否则{
installedApps.add(应用程序);
}
}
CustomAdapter custom=新的CustomAdapter();
applist.setAdapter(自定义);
}
类CustomAdapter扩展了BaseAdapter
{
@凌驾
public int getCount(){
返回installedApps.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
convertView=GetLayoutFlater().充气(R.layout.single_row,null);
ImageView app_face=(ImageView)convertView.findViewById(R.id.app_face);
TextView应用程序_名称=(TextView)convertView.findViewById(R.id.app_名称);
可绘制面=packman.getapplicationion(apps.get(position));
字符串标签=(字符串)packman.getApplicationLabel(apps.get(position));
应用面。可设置图像绘制(面);
app_name.setText(标签);
返回视图;
}
}
}
这就是我在运行应用程序时遇到的错误

enter code here

FATAL EXCEPTION: main

Process: com.example.limat.applocker, PID: 17438

java.lang.RuntimeException: Unable to instantiate activity 

Unable to instantiate activity ComponentInfo{com.example.limat.applocker/com.example.limat.applocker.AppList}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference


at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2567)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)

at android.app.ActivityThread.-wrap12(ActivityThread.java)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:154)

at android.app.ActivityThread.main(ActivityThread.java:6119)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference

at com.example.limat.applocker.AppList.<init>(AppList.java:23)

at java.lang.Class.newInstance(Native Method)

at android.app.Instrumentation.newActivity(Instrumentation.java:1078)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2557)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 

at android.app.ActivityThread.-wrap12(ActivityThread.java) 

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 

at android.os.Handler.dispatchMessage(Handler.java:102) 

at android.os.Looper.loop(Looper.java:154) 

at android.app.ActivityThread.main(ActivityThread.java:6119) 

at java.lang.reflect.Method.invoke(Native Method) 

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) "
在此处输入代码
致命异常:主
进程:com.example.limat.applocker,PID:17438
java.lang.RuntimeException:无法实例化活动
无法实例化activity ComponentInfo{com.example.limat.applocker/com.example.limat.applocker.AppList}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.pm.PackageManager android.content.Context.getPackageManager()
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2567)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6119)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.content.pm.PackageManager android.content.Context.getPackageManager()”
在com.example.limat.applocker.AppList。(AppList.java:23)
位于java.lang.Class.newInstance(本机方法)
位于android.app.Instrumentation.newActivity(Instrumentation.java:1078)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2557)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6119)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)”

在活动生命周期内初始化包管理器,因为上下文在那里可用。由于总是在上下文上调用getPackageManager,早期的代码将导致空上下文

可以在onCreate()方法中调用此语句


将以下代码行放入
onCreate
方法

PackageManager packman = getPackageManager();
List<ApplicationInfo> apps = packman.getInstalledApplications(0);
ListView applist;
List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>();
PackageManager packman=getPackageManager();
名单

PackageManager packman = getPackageManager();
List<ApplicationInfo> apps = packman.getInstalledApplications(0);
ListView applist;
List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>();