Android 自定义列表的CustomAdapter中出现空指针异常

Android 自定义列表的CustomAdapter中出现空指针异常,android,nullpointerexception,custom-lists,Android,Nullpointerexception,Custom Lists,我正在创建聊天信使。我只是没有得到任何发泄。强制停止累积。请帮忙 Main code.java import com.google.android.gms.gcm.GoogleCloudMessaging; public class Send extends Activity { static ListView msgList; Button send; EditText typeText; String Rid, name; static Array

我正在创建聊天信使。我只是没有得到任何发泄。强制停止累积。请帮忙

Main code.java

import com.google.android.gms.gcm.GoogleCloudMessaging;

public class Send extends Activity {

    static ListView msgList;
    Button send;
    EditText typeText;
    String Rid, name;
    static ArrayList<String> msg = new ArrayList<String>();
    static CustomAdapter adapter;
    Image image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.send);

        SharedPreferences settings = getSharedPreferences("prefs", 0);
        Rid = settings.getString("regId", "");
        name = settings.getString("user_name", "");

        msgList = (ListView) findViewById(R.id.listView1);
        typeText = (EditText) findViewById(R.id.msg);
        String last_msg = getIntent().getExtras().getString("txt");

        msg.add("a");
        msg.add("b");
        msg.add("c");
        msg.add("d");
        msg.add("e");
        msg.add("f");
        msg.add("g");
        msg.add("h");
        msg.add("i");

        adapter = new CustomAdapter(Send.this, msg);
        msgList.setAdapter(adapter);


        ((Button) findViewById(R.id.send))
                .setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        ArrayList<String> regIds = new ArrayList<String>();
                        regIds.add(Rid);

                        // if you want more devices to receive this message just
                        // add their regID
                        // in this arrayList
                        GCMMessageSender sender = new GCMMessageSender();
                        sender.send(sender.createContent(name, typeText
                                .getText().toString(), regIds, Rid, image));
                    }
                });

    }

    public static class GcmBroadcastReceiver extends WakefulBroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            // Explicitly specify that GcmMessageHandler will handle the intent.
            ComponentName comp = new ComponentName(context.getPackageName(),
                    GcmMessageHandler.class.getName());

            // Start the service, keeping the device awake while it is
            // launching.
            startWakefulService(context, (intent.setComponent(comp)));
            setResultCode(Activity.RESULT_OK);
        }
    };

    public static class GcmMessageHandler extends IntentService {

        String mes, text, RId, type, reg, group_name;
        ArrayList<String> reg_list = new ArrayList<String>();
        String active;
        private Handler handler;

        public GcmMessageHandler() {
            super("GcmMessageHandler");
        }

        @Override
        public void onCreate() {
            // TODO Auto-generated method stub
            super.onCreate();
            handler = new Handler();
        }

        @Override
        protected void onHandleIntent(Intent intent) {
            Bundle extras = intent.getExtras();

            GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
            // The getMessageType() intent parameter must be the intent you
            // received
            // in your BroadcastReceiver.
            String messageType = gcm.getMessageType(intent);

            type = extras.getString("type");
            mes = extras.getString("title");
            text = extras.getString("message");
            RId = extras.getString("Rid");

            ActivityManager am = (ActivityManager) this
                    .getSystemService(ACTIVITY_SERVICE);

            // get the info from the currently running task
            List<ActivityManager.RunningTaskInfo> taskInfo = am
                    .getRunningTasks(1);

            Log.d("topActivity", "CURRENT Activity ::"
                    + taskInfo.get(0).topActivity.getClassName());

            ComponentName componentInfo = taskInfo.get(0).topActivity;
            active = componentInfo.getClassName();

            if (type.equals("message"))
                notifyMessage();

            Log.i("GCM",
                    "Received : (" + messageType + ")  "
                            + extras.getString("title"));

            GcmBroadcastReceiver.completeWakefulIntent(intent);

        }

        public void insertToList(String text) {
            msg.add(text);
//          adapter.updateReceiptsList(msg);
            adapter.notifyDataSetChanged();
            //msgList.setSelection(msg.size());
        }


        public void notifyMessage() {
            handler.post(new Runnable() {
                public void run() {

                    Toast.makeText(getApplicationContext(), active,
                            Toast.LENGTH_LONG).show();

                    if (active.equals("com.example.notification.Send")) {
                        insertToList(text);
                    }else{
                    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                            GcmMessageHandler.this)
                            .setSmallIcon(R.drawable.ic_launcher)
                            .setContentTitle(mes)
                            .setContentText(text)
                            .setSound(
                                    RingtoneManager
                                            .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                            .setAutoCancel(true);

                    // // Creates an explicit intent for an Activity in your app
                    Intent resultIntent = new Intent(GcmMessageHandler.this,
                            Send.class);
                    resultIntent.putExtra("txt", text);
                    resultIntent.putExtra("regId", RId);
                    resultIntent
                            .setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
                                    | Intent.FLAG_ACTIVITY_SINGLE_TOP);

                    TaskStackBuilder stackBuilder = TaskStackBuilder
                            .create(GcmMessageHandler.this);

                    stackBuilder.addParentStack(Send.class);

                    stackBuilder.addNextIntent(resultIntent);

                    PendingIntent pendingintent = PendingIntent.getActivity(
                            GcmMessageHandler.this, 0, resultIntent, 0);

                    PendingIntent resultPendingIntent = stackBuilder
                            .getPendingIntent(0,
                                    PendingIntent.FLAG_UPDATE_CURRENT);

                    mBuilder.setContentIntent(resultPendingIntent);
                    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                    // // mId allows you to update the notification later on.
                    mNotificationManager.notify(0, mBuilder.build());
                }
                }
            });

        }

    }

}
import com.google.android.gms.gcm.GoogleCloudMessaging;
公共类发送扩展活动{
静态列表视图msgList;
按钮发送;
编辑文本类型文本;
字符串Rid,名称;
静态ArrayList msg=newArrayList();
静态自定义适配器;
图像;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.send);
SharedReferences设置=GetSharedReferences(“首选项”,0);
Rid=settings.getString(“regId”,即“”);
name=settings.getString(“user_name”,即“”);
msgList=(ListView)findViewById(R.id.listView1);
typeText=(EditText)findViewById(R.id.msg);
字符串last_msg=getIntent().getExtras().getString(“txt”);
味精添加(“a”);
味精添加(“b”);
味精添加(“c”);
味精添加(“d”);
味精添加(“e”);
味精添加(“f”);
味精添加(“g”);
味精添加(“h”);
味精添加(“i”);
adapter=新的CustomAdapter(Send.this,msg);
msgList.setAdapter(适配器);
((按钮)findViewById(R.id.send))
.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
ArrayList regIds=新的ArrayList();
添加(Rid);
//如果您想让更多设备接收此消息,只需
//添加他们的regID
//在这个数组列表中
GCMMessageSender sender=新的GCMMessageSender();
sender.send(sender.createContent)(名称,typeText
.getText().toString(),regIds,Rid,image));
}
});
}
公共静态类GcmBroadcastReceiver扩展WakefulBroadcastReceiver{
@凌驾
公共void onReceive(上下文、意图){
//TODO自动生成的方法存根
//显式指定GcmMessageHandler将处理该意图。
ComponentName comp=新的ComponentName(context.getPackageName(),
GcmMessageHandler.class.getName());
//启动服务,使设备在运行时保持唤醒状态
//发射。
startWakefulService(上下文,(intent.setComponent(comp));
setResultCode(Activity.RESULT\u OK);
}
};
公共静态类GcmMessageHandler扩展了IntentService{
字符串mes、text、RId、type、reg、group_name;
ArrayList reg_list=新建ArrayList();
字符串活动;
私人经办人;
公共GcmMessageHandler(){
超级(“GcmMessageHandler”);
}
@凌驾
public void onCreate(){
//TODO自动生成的方法存根
super.onCreate();
handler=新的handler();
}
@凌驾
受保护的手部内容无效(意图){
Bundle extras=intent.getExtras();
GoogleCloudMessaging gcm=GoogleCloudMessaging.getInstance(this);
//getMessageType()intent参数必须是您想要的intent参数
//收到
//在你的收音机里。
字符串messageType=gcm.getMessageType(intent);
type=extras.getString(“type”);
mes=额外的获取字符串(“标题”);
text=extras.getString(“消息”);
RId=extras.getString(“RId”);
ActivityManager am=(ActivityManager)此
.getSystemService(活动和服务);
//从当前正在运行的任务中获取信息
列表任务信息=am
.getRunningTasks(1);
Log.d(“topActivity”,“当前活动:”
+taskInfo.get(0.topActivity.getClassName());
ComponentName componentInfo=taskInfo.get(0).topActivity;
active=componentInfo.getClassName();
if(type.equals(“消息”))
notifyMessage();
Log.i(“GCM”,
“收到:(“+messageType+”)”
+获取字符串(“标题”);
GcmBroadcastReceiver.completeWakefulIntent(intent);
}
公共void插入列表(字符串文本){
msg.add(文本);
//adapter.updateReceiptsList(msg);
adapter.notifyDataSetChanged();
//msgList.setSelection(msg.size());
}
公共消息(){
handler.post(新的Runnable(){
公开募捐{
Toast.makeText(getApplicationContext(),处于活动状态,
Toast.LENGTH_LONG).show();
if(active.equals(“com.example.notification.Send”)){
插入列表(文本);
}否则{
NotificationCompat.Builder mBuilder=新建NotificationCompat.Builder(
GcmMessageHandler.this)
.setSmallIcon(R.drawable.ic_启动器)
.setContentTitle(mes)
.setContentText(文本)
.setSound(
铃声管理器
.getDefaultUri(RingtoneManager.TYPE_通知))
.setAutoCancel(真);
////为应用程序中的活动创建明确的意图
Intent resultIntent=新的Intent(GcmMessageHandler.this,
发送(类);
putExtra(“txt”,文本);
结果显示:putExtra(“regId
package com.example.notification;

public class CustomAdapter extends BaseAdapter {

    ArrayList <String> msg;
    ArrayList <String> date;
    ArrayList<Image> image;
    Activity context;

    public CustomAdapter(Activity context, ArrayList<String> msg) {

        // TODO Auto-generated constructor stub
        //super(context, msg);
        this.context=context;
        this.msg=msg;

    }

    public void updateReceiptsList(ArrayList<String> newlist) {
        this.msg.clear();
        this.msg = newlist;
        this.notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return msg.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
View view=convertView;
UserHolder holder = null;
        if (view == null) {
            holder = new UserHolder();
            String name = msg.get(position);
            if (position % 2 == 0) {
                LayoutInflater inflater = (context).getLayoutInflater();
                view = inflater.inflate(R.layout.msg_list_row, parent, false);

                holder.eventName = (TextView) view.findViewById(R.id.msgTextView);
            } else {

                LayoutInflater inflater = (context).getLayoutInflater();
                view = inflater.inflate(R.layout.row, parent, false);

                holder.eventName = (TextView) view.findViewById(R.id.event);

            }
            eventName.setText(name);
            view.setTag(holder);
        }else  {
            holder = (UserHolder) view.getTag();
        }

        return convertView;
    }
    static class UserHolder {
        TextView eventName;
        }
}
 holder.eventName.setText(name);