Java 显示智能手机中所有应用程序及其图标列表的简单应用程序

Java 显示智能手机中所有应用程序及其图标列表的简单应用程序,java,android,Java,Android,ListView显示正确。但当我单击该项时,它会抛出NullPointerException。原因可能是什么?非常感谢。 ListView显示正确。但当我单击该项时,它会抛出NullPointerException。原因可能是什么?多谢各位 package com.example.nerdlauncher; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import

ListView显示正确。但当我单击该项时,它会抛出NullPointerException。原因可能是什么?非常感谢。 ListView显示正确。但当我单击该项时,它会抛出NullPointerException。原因可能是什么?多谢各位

package com.example.nerdlauncher;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;


public class NerdLauncherFragment extends ListFragment 
{
    private static final String TAG = "NerdLauncherFragment";
    public ArrayList<TheApplication> icons = new ArrayList<TheApplication>();
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        Intent startupIntent = new Intent(Intent.ACTION_MAIN);
        startupIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        PackageManager pm = getActivity().getPackageManager();
        List<ResolveInfo> activities = pm.queryIntentActivities(startupIntent, 0);
        Log.i(TAG, "I've found " + activities.size() + " activities.");

        Collections.sort(activities, new Comparator<ResolveInfo>()
        {
            public int compare(ResolveInfo a, ResolveInfo b)
            {
                PackageManager pm = getActivity().getPackageManager();
                return String.CASE_INSENSITIVE_ORDER.compare(a.loadLabel(pm).toString(), b.loadLabel(pm).toString());
            }
        });
        for(int i = 0; i < activities.size(); i++)
        {
            icons.add(new TheApplication(activities.get(i).loadLabel(pm).toString(),activities.get(i).loadIcon(pm), activities.get(i)));
        }
        IconAdapter adapter = new IconAdapter(icons);
        setListAdapter(adapter);




    }
    @Override
    public void onListItemClick(ListView l, View v, int position, long id)
    {
        TheApplication app = (TheApplication) getListAdapter().getItem(position);

        ResolveInfo resolveInfo = app.getResolveInfo();
        ActivityInfo activityInfo = resolveInfo.activityInfo; // exception was thrown from this line

        if(activityInfo == null) return;

        Intent i = new Intent();
        i.setClassName(activityInfo.applicationInfo.packageName, activityInfo.name);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);


    }
    private class IconAdapter extends ArrayAdapter<TheApplication>
    {
        public IconAdapter(ArrayList<TheApplication> icons) 
        {
            super(getActivity(), android.R.layout.simple_list_item_1, icons);
        }

         @Override
            public View getView(int position, View convertView, ViewGroup parent) 
            {
                // if we weren't given a view, inflate one
                if (null == convertView) {
                    convertView = getActivity().getLayoutInflater()
                        .inflate(R.layout.list_item_app, null);
                }

                // configure the view for this Crime
                TheApplication theApp = getItem(position);

                TextView theTextView = (TextView)convertView.findViewById(R.id.text);
                theTextView.setText(theApp.getName());

                ImageView img = (ImageView) convertView.findViewById(R.id.icon);
                img.setImageDrawable(theApp.getIcon());

                return convertView;
            }

    }

}

在构造函数中进行更改

public TheApplication(String name, Drawable icon, ResolveInfo ri)
{
    this.mName = name;
    this.mIcon = icon;
    this.ri=ri;
}

1.我在任何地方都没有看到为列表项设置单击侦听器的代码。2.您应该更新您的问题并包含来自logcat的完整堆栈跟踪。它在函数onListItemClick中被覆盖,谢谢您的建议
public TheApplication(String name, Drawable icon, ResolveInfo ri)
{
    this.mName = name;
    this.mIcon = icon;
    this.ri=ri;
}