Java 包管理器初始化的null指针异常
我一直试图在点击按钮时显示已安装应用程序的列表,但软件包管理器抛出了一个空指针异常 这是我的java类,它在单击时被调用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
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>();