Google Cloud Message를 통해 들어오는 메시지를 허용하는 Activity Class에 구현 된 BroadcastReceiver가 있습니다. 나는 채팅으로이 클래스를 사용하려면, 그래서 들어오는 메시지가 후에, 나는 빈 공간을 사용 : 내가 들어오는 메시지를 수집하고, 내가 그들에게 보여 할 수 있도록 레이아웃을 만들려고 말했듯이BroadcastReceiver 메시지 수신 중 오류가 발생했습니다.
public void Chatpat(String name, String message){
chatinput.add(name);
chatinput.add(message);
Chat chat_data[] = new Chat[chatinput.size()];
chatinput.toArray();
ChatAdapter adapter = new ChatAdapter(this,
R.layout.listview_item_row, chat_data);
chatList = (ListView) findViewById(R.id.listView1);
chatList.setAdapter(adapter);
return;
}
. 내 ChatAdapter이 처리합니다. 문제는 BroadcastReceiver에서 메시지를 가져 오려고 할 때 오류가 발생한다는 것입니다.
String message_name = intent.getExtras().getString(NAME_MESSAGED);
String message_chat = intent.getExtras().getString(CHAT_MESSAGED);
이 희망 난 내 어댑터가 내가 가진 메시지를 표시하는 목록보기 만들려면 그 후, 수있을 것이라고 희망하고 :이 줄을 사용
Chatpat(message_name, message_chat);
는 수신 메시지를 수집 곧. 문제는 내가 오류가 발생하고 응용 프로그램이 충돌한다는 것입니다.
03-25 22:22:09.928: E/AndroidRuntime(1010): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.cabman.lol.ok.DISPLAY_MESSAGE (has extras) } in [email protected]
또한 Chatpat void 내에서 NullPointerException이 발생합니다. 내가 제거 할 경우 :
Chatpat(message_name, message_chat);
을 브로드 캐스트 리시버 내부에서, 메시지는 이런 일이 발생하는 이유는 이해가 안 .. 아무 문제없이 올바른 방법으로오고있다. 나는 그 문제가 그 들어오는 메시지를 사용하여 메시지를 보여주기 위해 목록보기를 만드는 Chatpat를 시작한다는 사실과 관련이 있다고 믿습니다.
정말 이상한 일은 다른 출처와 함께 Chatpat에게 먹이를 주려고 노력하고 있지만 값을 출력하려고하면받는 Intent에 대해 동일한 Error가 다시 발생합니다.
이 전체 활동 :
public class UserComActivity extends Activity{
List<String> messages;
List<String> names;
private ListView chatList;
SessionManager session;
EditText userText;
EditText chatText;
UserFunctions user = new UserFunctions();
String informchat = "yes";
String message_gcm;
Boolean i = false;
Chat chat_data[] ;
ArrayList<String> chatinput = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.userchat);
registerReceiver(mHandleMessageReceiver, new IntentFilter(
DISPLAY_MESSAGE_ACTION));
//chatText = (EditText) findViewById(R.id.messageHistory);
userText = (EditText) findViewById(R.id.message);
final String regId = GCMRegistrar.getRegistrationId(this);
final Button button = (Button) findViewById(R.id.sendMessageButton);
session = new SessionManager(getApplicationContext());
HashMap<String, String> comu = session.matchUserDetails();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
String message = userText.getText().toString();
if (i == false){
session = new SessionManager(getApplicationContext());
HashMap<String, String> comu = session.matchUserDetails();
String gcm = comu.get(SessionManager.KEY_GCM);
HashMap<String, String> co = session.getUserDetails();
String name = co.get(SessionManager.KEY_NAME);
System.out.println("UserComActivity:");
System.out.println(name);
System.out.println(gcm);
chatText.setText(name +": "+ message);
// user.sendMessage(name, gcm, regId, message);
}
else if (i == true){
session = new SessionManager(getApplicationContext());
HashMap<String, String> co = session.getUserDetails();
String name = co.get(SessionManager.KEY_NAME);
// user.sendMessage(name, message_gcm, regId, message);
}
}
});
}
/**
public ArrayList<String> addChat(String name, String message){
chatinput.add(name);
chatinput.add(message);
return chatinput;
}**/
public void Chatpat(String name, String message){
chatinput.add(name);
chatinput.add(message);
Chat chat_data[] = new Chat[chatinput.size()];
chatinput.toArray(chat_data);
ChatAdapter adapter = new ChatAdapter(this,
R.layout.listview_item_row, chat_data);
chatList = (ListView) findViewById(R.id.listView1);
chatList.setAdapter(adapter);
return;
}
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
i = true;
String message_tag = intent.getExtras().getString(TAG_MESSAGE);
if(message_tag.equals("chat")){
String message_name = intent.getExtras().getString(NAME_MESSAGED);
String message_chat = intent.getExtras().getString(CHAT_MESSAGED);
Chatpat(message_name, message_chat);
}
}
};
@Override
protected void onDestroy() {
try {
unregisterReceiver(mHandleMessageReceiver);
GCMRegistrar.onDestroy(this);
} catch (Exception e) {
Log.e("UnRegister Receiver Error", "> " + e.getMessage());
}
super.onDestroy();
}
}
이는 내가 활동에 원하는 텍스트를 표시하도록 목록보기를 만드는 데 사용하는 클래스입니다 :
public class Chat {
public String name;
public String message;
public Chat(){
super();
}
public Chat(String name, String message) {
super();
this.name = name;
this.message = message;
//System.out.println(name);
System.out.println("Chat!!!!!!");
}
을
}
및
public class ChatAdapter extends ArrayAdapter<Chat>{
Context context;
int layoutResourceId;
Chat data[] = null;
public ChatAdapter(Context context, int layoutResourceId,
Chat[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ChatHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ChatHolder();
holder.txtUName = (TextView)row.findViewById(R.id.userName);
holder.txtMessage = (TextView)row.findViewById(R.id.txtChat);
System.out.println("ChatAdapter");
row.setTag(holder);
}
else
{
holder = (ChatHolder)row.getTag();
}
Chat chat = data[position];
holder.txtMessage.setText(chat.message);
holder.txtUName.setText(chat.name);
System.out.println("ChatAdapter");
return row;
}
static class ChatHolder
{
TextView txtUName;
TextView txtMessage;
}
}
로그 캣 : Chatpat에서
03-26 02:29:28.807: E/AndroidRuntime(5063): FATAL EXCEPTION: main
03-26 02:29:28.807: E/AndroidRuntime(5063): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.cabman.lol.ok.DISPLAY_MESSAGE (has extras) } in [email protected]
03-26 02:29:28.807: E/AndroidRuntime(5063): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905)
03-26 02:29:28.807: E/AndroidRuntime(5063): at android.os.Handler.handleCallback(Handler.java:587)
03-26 02:29:28.807: E/AndroidRuntime(5063): at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 02:29:28.807: E/AndroidRuntime(5063): at android.os.Looper.loop(Looper.java:123)
03-26 02:29:28.807: E/AndroidRuntime(5063): at android.app.ActivityThread.main(ActivityThread.java:4627)
03-26 02:29:28.807: E/AndroidRuntime(5063): at java.lang.reflect.Method.invokeNative(Native Method)
03-26 02:29:28.807: E/AndroidRuntime(5063): at java.lang.reflect.Method.invoke(Method.java:521)
03-26 02:29:28.807: E/AndroidRuntime(5063): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-26 02:29:28.807: E/AndroidRuntime(5063): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-26 02:29:28.807: E/AndroidRuntime(5063): at dalvik.system.NativeStart.main(Native Method)
03-26 02:29:28.807: E/AndroidRuntime(5063): Caused by: java.lang.ArrayStoreException
03-26 02:29:28.807: E/AndroidRuntime(5063): at java.lang.System.arraycopy(Native Method)
03-26 02:29:28.807: E/AndroidRuntime(5063): at java.util.ArrayList.toArray(ArrayList.java:523)
03-26 02:29:28.807: E/AndroidRuntime(5063): at com.cabman.lol.ok.UserComActivity.Chatpat(UserComActivity.java:149)
03-26 02:29:28.807: E/AndroidRuntime(5063): at com.cabman.lol.ok.UserComActivity$1.onReceive(UserComActivity.java:184)
03-26 02:29:28.807: E/AndroidRuntime(5063): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)
03-26 02:29:28.807: E/AndroidRuntime(5063): ... 9 more
문제를 해결했는지 여부를 알려 주실까요? –
아니 해결되지, 나도 그 문제가 뭔지 몰라. – user1732457
내가 무엇을하려고하는지 알 수 있습니까? –