Android 自定义列表的CustomAdapter中出现空指针异常
我正在创建聊天信使。我只是没有得到任何发泄。强制停止累积。请帮忙 Main code.javaAndroid 自定义列表的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
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);