Android 片段NullPointerException
我是android新手,我尝试将一个活动转换为一个片段。 日志是这样写的:Android 片段NullPointerException,android,android-fragments,Android,Android Fragments,我是android新手,我尝试将一个活动转换为一个片段。 日志是这样写的: 04-12 04:28:02.287 7052-7052/de.gigadroid.random E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: de.gigadroid.random, PID: 7052 java.lang.NullPointerException at de.gigadroid.random.MessagingFragment$
04-12 04:28:02.287 7052-7052/de.gigadroid.random E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: de.gigadroid.random, PID: 7052
java.lang.NullPointerException
at de.gigadroid.random.MessagingFragment$1.onClick(MessagingFragment.java:107)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
这就是代码当前的样子:
public class MessagingFragment extends Fragment{
private static final int MESSAGE_CANNOT_BE_SENT = 0;
public String username;
private EditText messageText;
private ListView messageHistoryText;
private ImageButton sendMessageButton;
private IAppManager imService;
private FriendInfo friend = new FriendInfo();
private LocalStorageHandler localstoragehandler;
private Cursor dbCursor;
private Handler handler = new Handler();
public ArrayAdapter<String> msgListleft;
public ArrayAdapter<String> msgListright;
ArrayList<Message> messages;
Adapter adapter;
static Random rand = new Random();
static String sender;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.messaging_screen, container, false);
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
messageHistoryText = (ListView) view.findViewById(R.id.messageHistory);
messageText = (EditText) view.findViewById(R.id.message);
messageHistoryText.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
messageText.requestFocus();
messageHistoryText.setAdapter(adapter);
sendMessageButton = (ImageButton) view.findViewById(R.id.sendMessageButton);
sendMessageButton.setOnClickListener(new View.OnClickListener() {
CharSequence message;
Handler handler = new Handler();
public void onClick(View arg0) {
message = messageText.getText();
if (message.length() > 0) {
appendToMessageHistory(imService.getUsername(), message.toString());
localstoragehandler.insert(imService.getUsername(), friend.userName, message.toString());
messageText.setText("");
Thread thread = new Thread() {
public void run() {
try {
if (imService.sendMessage(imService.getUsername(), friend.userName, message.toString()) == null) {
handler.post(new Runnable() {
public void run() {
Toast.makeText(getActivity(), R.string.message_cannot_be_sent, Toast.LENGTH_LONG).show();
//showDialog(MESSAGE_CANNOT_BE_SENT);
}
});
}
} catch (UnsupportedEncodingException e) {
Toast.makeText(getActivity(), R.string.message_cannot_be_sent, Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
};
thread.start();
}
}
});
messageText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == 66) {
sendMessageButton.performClick();
return true;
}
return false;
}
});
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
final ArrayAdapter<String> msgListleft = new ArrayAdapter<String>(this.getActivity(), R.layout.sms_row);
final ArrayAdapter<String> msgListright = new ArrayAdapter<String>(this.getActivity(), R.layout.sms_row);
;
Bundle extras = this.getArguments();
friend.userName = extras.getString(FriendInfo.USERNAME);
friend.ip = extras.getString(FriendInfo.IP);
friend.port = extras.getString(FriendInfo.PORT);
String msg = extras.getString(MessageInfo.MESSAGETEXT);
messages = new ArrayList<Message>();
adapter = new Adapter(this.getActivity(), messages);
// EditText friendUserName = (EditText) findViewById(R.id.friendUserName);
// friendUserName.setText(friend.userName);
localstoragehandler = new LocalStorageHandler(this.getActivity());
dbCursor = localstoragehandler.get(friend.userName, IMService.USERNAME);
if (dbCursor.getCount() > 0) {
int noOfScorer = 0;
dbCursor.moveToFirst();
while ((!dbCursor.isAfterLast()) && noOfScorer < dbCursor.getCount()) {
noOfScorer++;
this.appendToMessageHistory(dbCursor.getString(2), dbCursor.getString(3));
dbCursor.moveToNext();
}
}
localstoragehandler.close();
if (msg != null) {
this.appendToMessageHistory(friend.userName, msg);
((NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE)).cancel((friend.userName + msg).hashCode());
}
}
protected Dialog onCreateDialog(int id) {
int message = -1;
switch (id) {
case MESSAGE_CANNOT_BE_SENT:
message = R.string.message_cannot_be_sent;
break;
}
if (message == -1) {
return null;
} else {
return new AlertDialog.Builder(MessagingFragment.this.getActivity())
.setMessage(message)
.setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
/* User clicked OK so do some stuff */
}
})
.create();
}
}
public class MessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extra = intent.getExtras();
String username = extra.getString(MessageInfo.USERID);
String message = extra.getString(MessageInfo.MESSAGETEXT);
if (username != null && message != null) {
if (friend.userName.equals(username)) {
appendToMessageHistory(username, message);
localstoragehandler.insert(username, imService.getUsername(), message);
} else {
if (message.length() > 15) {
message = message.substring(0, 15);
}
}
}
}
}
;
private MessageReceiver messageReceiver = new MessageReceiver();
public void appendToMessageHistory(final String username, String message) {
if (username != null && message != null) {
final String mssg = message;
handler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (friend.userName.equals(username)) {
messages.add(new Message(mssg , false));
messageHistoryText.setAdapter(adapter);
} else {
messages.add(new Message(mssg, true));
messageHistoryText.setAdapter(adapter);
}
}
});
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (localstoragehandler != null) {
localstoragehandler.close();
}
if (dbCursor != null) {
dbCursor.close();
}
}}
公共类MessagingFragment扩展了片段{
私有静态最终整型消息\u无法\u发送=0;
公共字符串用户名;
私有编辑文本消息文本;
私有ListView消息历史文本;
私有ImageButton sendMessageButton;
私人IAppManager imService;
private FriendInfo friend=新建FriendInfo();
私有LocalStorageHandler LocalStorageHandler;
私有游标dbCursor;
私有处理程序=新处理程序();
公共阵列适配msgListleft;
公共阵列适配msgListright;
ArrayList消息;
适配器;
静态随机兰德=新随机();
静态字符串发送器;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.messaging\u屏幕,容器,错误);
返回rootView;
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
messageHistoryText=(ListView)view.findViewById(R.id.messageHistory);
messageText=(EditText)view.findViewById(R.id.message);
messageHistoryText.setTranscriptMode(ListView.TRANSCRIPT\u MODE\u ALWAYS\u SCROLL);
messageText.requestFocus();
messageHistoryText.setAdapter(适配器);
sendMessageButton=(ImageButton)view.findViewById(R.id.sendMessageButton);
sendMessageButton.setOnClickListener(新视图.OnClickListener(){
字符序列信息;
Handler=newhandler();
公共void onClick(视图arg0){
message=messageText.getText();
if(message.length()>0){
appendToMessageHistory(imService.getUsername(),message.toString());
localstoragehandler.insert(imService.getUsername()、friend.userName、message.toString());
messageText.setText(“”);
线程线程=新线程(){
公开募捐{
试一试{
if(imService.sendMessage(imService.getUsername()、friend.userName、message.toString())==null){
handler.post(新的Runnable(){
公开募捐{
Toast.makeText(getActivity(),R.string.message_无法发送,Toast.LENGTH_LONG).show();
//showDialog(无法发送消息);
}
});
}
}捕获(不支持的编码异常e){
Toast.makeText(getActivity(),R.string.message_无法发送,Toast.LENGTH_LONG).show();
e、 printStackTrace();
}
}
};
thread.start();
}
}
});
messageText.setOnKeyListener(新视图.OnKeyListener(){
公共布尔onKey(视图v、int keyCode、KeyEvent事件){
如果(键代码==66){
sendMessageButton.performClick();
返回true;
}
返回false;
}
});
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
final ArrayAdapter msgListleft=新的ArrayAdapter(this.getActivity(),R.layout.sms_行);
final ArrayAdapter msgListright=新的ArrayAdapter(this.getActivity(),R.layout.sms_行);
;
Bundle extras=this.getArguments();
friend.userName=extras.getString(FriendInfo.userName);
friend.ip=extras.getString(FriendInfo.ip);
friend.port=extras.getString(FriendInfo.port);
String msg=extras.getString(MessageInfo.MESSAGETEXT);
messages=newarraylist();
适配器=新适配器(this.getActivity(),消息);
//EditText-friendUserName=(EditText)findViewById(R.id.friendUserName);
//friendUserName.setText(friend.userName);
localstoragehandler=新的localstoragehandler(this.getActivity());
dbCursor=localstoragehandler.get(friend.userName,IMService.userName);
if(dbCursor.getCount()>0){
int noOfScorer=0;
dbCursor.moveToFirst();
而((!dbCursor.isAfterLast())和&noOfScorer