我使用android和套接字進行聊天應用。聊天界面在片段內。雖然兩款設備都顯示聊天界面,但它運行良好。但是當一個設備關閉時,它會給我錯誤的力量關閉。當活動被破壞時,片段監聽器不工作
這是我的代碼。 MainActivity.java
public class MainActivity extends AppCompatActivity {
private FragmentManager manager;
private android.support.v4.app.FragmentTransaction transaction;
private Socket socket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
manager = getSupportFragmentManager();
transaction = manager.beginTransaction();
chatFragment enter = new chatFragment();
transaction.add(R.id.fragmentContainer, enter);
transaction.commit();
}
}
}
和ChatFragment.java
public class ChatFragment extends Fragment {
private ListView listchat;
private Button send;
private EditText msgText;
public ChatAdapter adapter;
private ArrayList<ChatModel> items = new ArrayList<ChatModel>();
private boolean isactive;
private Toolbar chatToolbar;
private FragmentManager manager;
private FragmentTransaction transaction;
private Socket socket;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
View v;
v = inflater.inflate(R.layout.chat_fragment, container, false);
SocketSingleton singleton = (SocketSingleton) getActivity().getApplication();
socket = singleton.getmSocket();
// this is listener for message coming
socket.on("message", messageListener);
msgText = (EditText) v.findViewById(R.id.editMsg);
adapter = new ChatAdapter(getActivity(), R.layout.chat_list, items);
listchat = (ListView) v.findViewById(R.id.listchat);
listchat.setAdapter(adapter);
listchat.setDivider(null);
send = (Button) v.findViewById(R.id.btnSend);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addMessage();
}
});
return v;
}
private void addMessage() {
ChatModel item = new ChatModel();
item.setMsg(msgText.getText().toString());
items.add(item);
adapter.notifyDataSetChanged();
String message = msgText.getText().toString();
socket.emit("message", message);
msgText.setText("");
}
private Emitter.Listener messageListener = new Emitter.Listener() {
@Override
public void call(final Object... args) {
// error start from here
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject json = (JSONObject) args[0];
String msg;
try {
msg = json.getString("message").toString();
ChatModel model = new ChatModel();
model.setMsg(msg);
items.add(model);
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
};
}
在longcat它說。
FATAL EXCEPTION: EventThread
java.lang.NullPointerException
在應用程序中,它強制關閉時消息來了,活動關閉。消息即將到來時如何處理此偵聽器,並關閉活動?謝謝。
可能重複[什麼是空指針異常,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-和我如何修復它) – aribeiro