私のアプリは正常に動作しますが、アプリがバックグラウンドになると、再開する際にクラッシュします。 ソースコードでわかるように、私はonStart、onStopなどのイベントを記録します。起動できません再開時にComponentInfoアクティビティ
私のログには、アプリケーションを起動するとonStart、onResumeが表示されます。バックキーを押すと、onStop、STOP、onPause、onDestroyが表示されます。
アプリを再起動しようとするとすぐにクラッシュします。それ以外のメッセージはログに記録されません。「アクティビティComponentInfo java lang.NullPointerExceptionを開始できません。
どうすればこの問題を防ぐことができますか?
public class Start extends Activity {
private Handler handler = new Handler();
private ArrayList<String> discussionThread;
private EditText textMessage;
private ListView listview;
private ConnectionConfiguration config;
private Presence presence;
private MultiUserChat muc;
private DiscussionHistory history;
private PacketFilter filter;
private MyCustomAdapter discussionThreadAdapter;
private XMPPConnection connection;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
initConnection();
} catch (XMPPException e) {
e.printStackTrace();
}
final EditText textMessage = (EditText) this.findViewById(R.id.message);
listview = (ListView) this.findViewById(R.id.list);
discussionThread = new ArrayList<String>();
discussionThreadAdapter = new MyCustomAdapter();
listview.setAdapter(discussionThreadAdapter);
Button send = (Button) this.findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String text = textMessage.getText().toString();
Message msg = new Message(ROOM, Message.Type.groupchat);
msg.setBody(text);
connection.sendPacket(msg);
discussionThreadAdapter.notifyDataSetChanged();
textMessage.setText("");
}
});
textMessage.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
SendText();
return true;
default:
break;
}
}
return false;
}
});
}
private void initConnection() throws XMPPException {
config = new ConnectionConfiguration(SERVER_HOST, SERVER_PORT, SERVICE_NAME);
connection = new XMPPConnection(config);
connection.connect();
connection.login(LOGIN, PASSWORD);
presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
muc = new MultiUserChat(connection, ROOM);
history = new DiscussionHistory();
history.setMaxStanzas(25);
muc.join(LOGIN, PASSWORD, history, SmackConfiguration.getPacketReplyTimeout());
filter = new MessageTypeFilter(Message.Type.groupchat);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
String fromName = message.getFrom().substring(48);
String nieuweRegel = fromName + ": " + message.getBody();
fromName = fromName.toUpperCase();
if (fromName.equals(LOGIN.toUpperCase())) {
discussionThreadAdapter.addVanMijItem(nieuweRegel);
} else {
discussionThreadAdapter.addVanAnderItem(nieuweRegel);
}
}
}
}, filter);
}
private void Notify() {
discussionThreadAdapter.notifyDataSetChanged();
listview.setSelection(discussionThreadAdapter.getCount());
}
private class MyCustomAdapter extends BaseAdapter {
private static final int BERICHT_VAN_ANDER = 0;
private static final int BERICHT_VAN_MIJ = 1;
private static final int TYPE_MAX_COUNT = BERICHT_VAN_MIJ + 1;
private LayoutInflater mInflater;
private TreeSet<Integer> mySet = new TreeSet<Integer>();
public MyCustomAdapter() {
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addVanAnderItem(final String item) {
discussionThread.add(item);
handler.post(new Runnable() {
public void run() {
Notify();
}
});
}
public void addVanMijItem(final String item) {
discussionThread.add(item);
mySet.add(discussionThread.size() - 1);
handler.post(new Runnable() {
public void run() {
Notify();
}
});
}
@Override
public int getItemViewType(int position) {
return mySet.contains(position) ? BERICHT_VAN_MIJ : BERICHT_VAN_ANDER;
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
@Override
public int getCount() {
return discussionThread.size();
}
@Override
public String getItem(int position) {
return discussionThread.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case BERICHT_VAN_ANDER:
convertView = mInflater.inflate(R.layout.bericht_van_ander_item, null);
holder.textView = (TextView)convertView.findViewById(R.id.textline);
break;
case BERICHT_VAN_MIJ:
convertView = mInflater.inflate(R.layout.bericht_van_mij_item, null);
holder.textView = (TextView)convertView.findViewById(R.id.textline);
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(discussionThread.get(position));
return convertView;
}
}
public static class ViewHolder {
public TextView textView;
}
private void SendText() {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(textMessage.getWindowToken(), 0);
String text = textMessage.getText().toString();
Message msg = new Message(ROOM, Message.Type.groupchat);
msg.setBody(text);
connection.sendPacket(msg);
textMessage.setText("");
}
public void onStart() {
super.onStart();
Log.i("CONN", "onStart");
startConnection();
}
public void onRestart() {
super.onRestart();
Log.i("CONN", "onReStart");
startConnection();
}
public void onResume() {
super.onResume();
Log.i("CONN", "onResume");
startConnection();
}
public void onPause() {
super.onPause();
Log.i("CONN", "onPause");
stopConnection();
}
public void onStop() {
super.onStop();
Log.i("CONN", "onStop");
stopConnection();
}
public void onDestroy() {
super.onDestroy();
Log.i("CONN", "onDestroy");
stopConnection();
}
private void stopConnection() {
if (connection != null) {
Log.i("CONN", "STOP");
connection.disconnect(presence);
connection = null;
filter = null;
history = null;
muc = null;
presence = null;
config = null;
discussionThreadAdapter = null;
}
}
private void startConnection() {
if (connection.isConnected()) {
} else {
Log.i("CONN", "START");
try {
initConnection();
} catch (XMPPException e) {
e.printStackTrace();
}
}
}
}
OK私は、次のように変更:
private void startConnection() {
if (connection != null) {
Log.i("CONN", "RUNNING");
} else {
Log.i("CONN", "START");
try {
initConnection();
} catch (XMPPException e) {
e.printStackTrace();
}
}
}
私はアプリを起動し、すべてが正常に動作します。ログ:
5月12日08:40:21.743:D/AndroidRuntime(491):>>>>>>>>>>>>>> AndroidRuntime START < < < < < < < < < < < < < < 5月12日08:40:21.743: D/AndroidRuntime(491):40:CheckJNIは
05から12 08 ONである22.065:D/AndroidRuntime(491):---ネイティブ登録 機能---
5月12日08:40:23.353:D/AndroidRuntime(491):40:23.363:D/dalvikvm(491):VM
05から12 08をシャットダウンデバッガを取り外しました。 40:23.393:オブジェクト レジストリは1つのエントリ
5月12日08
を持っていたI/AndroidRuntime(491):注:スレッド の添付 'バインダースレッド#3'5月12日午前8時40分に失敗しました: 24.184:D/AndroidRuntime(499):>>>>>>>>>>>>>> AndroidRuntime START < < < < < < < < < < < < < <
5月12日08:40:24.184:D/AndroidRuntime(499):40:CheckJNIは
05から12 08 ONである24.523:D/AndroidRuntime(499):--- ---ネイティブ 機能を登録します
5月12日08:40:25.873:I/ActivityManager(70):最低活性:テント{ 行為= android.intent.action.MAIN猫= [android.intent.category.LAUNCHER] FLG = 0x10000000 cmp = nl.yeswecanclinics.chat/.Start}
05-12 08:40:25。965:D/AndroidRuntime(499):VMをシャットダウンする
05-12 08:40:25.973:D/dalvikvm(499):デバッガが切り離されました。 40:26.034:オブジェクト レジストリは1つのエントリ
5月12日08
を持っていたI/AndroidRuntime(499):注:スレッド の添付 'バインダースレッド#3'5月12日午前8時40分に失敗しました: 26.105:I/ActivityManager(70):活性についてnl.yeswecanclinics.chat/.Start PROC nl.yeswecanclinics.chatを開始します。 PID = 506 UID = 10032のGIDの= {3003、1015}
5月12日08 :40:27.843:I/global(506): で使用されるデフォルトのバッファサイズBufferedReaderコンストラクタ。 8k-charバッファが必要な場合は明示的に指定する方がよいでしょう。
05-12 08:40:27.843:I/global(506):デフォルトのバッファサイズは で使用されます。BufferedWriterコンストラクタ。 8k-charバッファが必要な場合は明示的に指定する方がよいでしょう。
5月12日08:40:28.294:/ System.errの(506)W: java.security.KeyStoreException:40:キーストアJKS実装は
5月12日08が見つかりません28.294:W /システム.ERR(506):40:28.294:をSystem.err/W(506): org.jivesoftwareでjava.security.KeyStore.getInstance(KeyStore.java:134)
5月12日08時。 smack.ServerTrustManager。(ServerTrustManager.java:61)
05-12 08:40:28.294:W/System.err(506): org.jivesoftware.smack。 XMPPConnection.proceedTLSReceived(XMPPConnection.java:832)
5月12日08:40:28.304: org.jivesoftware.smack.PacketReader.parsePacketsで(PacketReader.java:268)をSystem.err(506)/ W
5月12日08:40:28.304:
05から12 08 でorg.jivesoftware.smack.PacketReader.access $ 000(PacketReader.java:44)をSystem.err(506)/ W: 40:28.313:W/System.err(506): org.jivesoftware.smack.PacketReader $ 1.run(PacketReader.java:71)
05-12 08:40:29.004:I/glob al(506): で使用されるデフォルトのバッファサイズBufferedReaderコンストラクタ。 8k-charバッファが必要な場合は明示的に指定する方がよいでしょう。05-12 08:40:29.014:I/global(506): で使用されるデフォルトのバッファサイズBufferedWriterコンストラクタ。 8k-charバッファが必要な場合は明示的に指定する方がよいでしょう。
5月12日08:40:29.483:D/dalvikvmは、(506):40:29.663:GC_FOR_MALLOCは153ms
5月12日08に3668個のオブジェクト /280752バイトを解放I/CONN(506)。 40::I/CONN(506):29.685 RUNNING
5月12日08:40:29.685:I/CONN(506):onResume
5月12日
5月12日08 ONSTART 08:40:29693:I/CONN(506):RUNNING
5月12日08:40:30.633:I/ActivityManager(70):表示アクティビティ nl.yeswecanclinics.chat/.Start:4712ミリ秒(総384269 MS)
5月12日08:40:37.114:D/dalvikvm(175):41:GC_EXPLICIT私はBACKボタンを押し
05から12 08 444個のオブジェクト/ 122ms
で 22064バイトを解放07.253 :W/KeyCharacterMap(506):ID 0のキーボードなし
0 5-12 08:41:07.253:KeyCharacterMap/W(506):デフォルトのキーマップの使用:
/system/usr/keychars/qwerty.kcm.bin5月12日08:41:07.403:I/CONN( 506):41:07.403:
5月12日08 onPause I/CONN(506):41:07.784:
5月12日08 STOP/InputManagerService(70)W:非 に入力を開始-focusedクライアント [email protected](UID = 10032 PID = 506)
5月12日08:41:07.804:W/IInputConnect ionWrapper(506): 非アクティブInputConnection上showStatusIcon
5月12日08:41:08.173:I/CONN(506):onStop
5月12日08:41:08.173:I/CONN(506) :41:30.583:
onDestroy IはICON
05から12 08をクリックすることによりAPPを再起動する(506)I /グローバル: BufferedReaderのコンストラクタで使用されるデフォルトバッファサイズ。 8k-charバッファが必要な場合は明示的に指定する方がよいでしょう。
05-12 08:41:30.623:I/global(506): で使用されるデフォルトのバッファサイズBufferedWriterコンストラクタ。 8k-charバッファが必要な場合は明示的に指定する方がよいでしょう。
5月12日08:41:31.663:/ System.errの(506)W: java.security.KeyStoreException:41:キーストアJKS実装は
5月12日08が見つかりません31.663:W /システム.ERR(506):41:31.663:をSystem.err/W(506): org.jivesoftwareでjava.security.KeyStore.getInstance(KeyStore.java:134)
5月12日08時。 smack.ServerTrustManager。(ServerTrustManager.java:61)
05-12 08:41:31.674:W/System.err(506): org.jivesoftware.smack。 XMPPConnection.proceedTLSReceived(XMPPConnection.java:832)
5月12日08:41:31.674: org.jivesoftware.smack.PacketReader.parsePacketsで(PacketReader.java:268)をSystem.err(506)/ W
5月12日08:41:31.683:
05から12 08 でorg.jivesoftware.smack.PacketReader.access $ 000(PacketReader.java:44)をSystem.err(506)/ W: 41:31。683:W/System.errの(506):で org.jivesoftware.smack.PacketReader $ 1.run(PacketReader.java:71)
5月12日08:41:31.984:I /グローバル(506): で使用されるデフォルトのバッファサイズ。BufferedReaderコンストラクタ。 8k-charバッファが必要な場合は明示的に指定する方がよいでしょう。
05-12 08:41:31.994:I/global(506): で使用されるデフォルトのバッファサイズBufferedWriterコンストラクタ。 8k-charバッファが必要な場合は明示的に指定する方がよいでしょう。
5月12日08:41:32.043:D/AndroidRuntime(506):41:32.043:VM
05から12 08のシャットダウン/ dalvikvm(506)W:= 1スレッドID:スレッドで終了 キャッチされない例外(グループ= 0x4001d800)
5月12日08:41:32.214:D/dalvikvm(506):41:32.226 GC_FOR_MALLOCは147ms
05から12 08 5507オブジェクト /388504バイトを解放:D/NativeCrypto(506):OpenSSLセッションを解放する
05/12 08:41:32.234:E/AndroidRuntime(506):致命的除外:メイン
05-12 08:41:32.234:E/AndroidRuntime(506):java.lang.RuntimeException: 開始できません活性 ComponentInfo {nl.yeswecanclinics.chat/nl.yeswecanclinics.chat.Start} java.lang.NullPointerExceptionが
5月12日08:41:32.234:E/AndroidRuntime(506): android.appで.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
5月12日08:41:32.234:E/AndroidRuntime(506):android.app.ActivityThread.handleLaunchActivi でTY(ActivityThread.java:2679)
5月12日08:41:32.234:E/AndroidRuntime(506): android.app.ActivityThread.access $ 2300(ActivityThread.java:125)で
05 -12 08:41:32.234:E/AndroidRuntime(506):41:32.234: android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)
5月12日08時E/AndroidRuntime( 506): android.os.Handler.dispatchMessage(Handler.java:99)
05-12 08:41:32.234:E/AndroidRuntime(506): android.os.Looper.loop(Looper.java:123)
5月12日08:41:32.234:E/AndroidRuntime(506): android.app.ActivityThread.mainで(ActivityThread.java:4627 )
5月12日08:41:32.234:E/AndroidRuntime(506):41:32.234:E java.lang.reflect.Method.invokeNative(ネイティブメソッド)
5月12日08時/ AndroidRuntime(506): java.lang.reflect.Method.invoke(Method.java:521)で
5月12日08:41:32.234:E/AndroidRuntime(506):でcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868) 05-12 08:41:32。234:E/AndroidRuntime(506):41:32.234:E/AndroidRuntime(506):で com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
5月12日08時 dalvik.system.NativeStart.main(ネイティブメソッド)
5月12日08:41:32.234:E/AndroidRuntime(506): java.lang.NullPointerExceptionが
5月12日08:起因します。 41:32.234:E/AndroidRuntime(506): org.jivesoftware.smackx.muc.MultiUserChat $ 1.connectionCreated(MultiUserChat.java:114)
5月12日08:41:32.234:E/AndroidRuntime(506): org.jivesoftware.smack.XMPPConnection.initConnection(XMPPConnection.java:618)
5月12日08時:41:32.234:E/AndroidRuntime(506): org.jivesoftware.smack.XMPPConnection.connectUsingConfigurationで(XMPPConnection.java:565)
5月12日08:41:32.234:E/AndroidRuntime(506): org.jivesoftware.smackで.XMPPConnection.connect(XMPPConnection.java:991)
5月12日08:41:32.234:E/AndroidRuntime(506): nl.yeswecanclinics.chat.Start.initConnection(Start.java:131)で
5月12日08:41:32.234:E/AndroidRuntime(506): nl.yeswecanclinics.chat.Start.onCreate(Start.java:71)で
5月12日08:41:32.234 :E/AndroidRuntime(506):41:32.234:E/AndroidRuntime(506): android.appでandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
5月12日08時。 ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-12 08:41:32.234:E/AndroidRuntime(506):... 11さらにあなたが
if(connection.isConnected())
をチェックしますかしようとすると、あなたがそれを設定しているためので、あなたがnull
を受け取るnull
connection
に
logcat出力を投稿できますか? –
投稿するにはどうすればいいですか:-) – user1273768
「ウィンドウ - >表示の表示 - >その他のビュー」を開き、「ログカット」を見つけてクリックします。次に、 'NullPointerException'を取得し、関連するlogcat出力(' NullPointerException'がどの行に出現したかを示すもの)を投稿するまで、プログラムを実行します。 'NullPointerException'が発生した行(正確な行番号がわからないので)も教えてください。 –