简体   繁体   English

无法在恢复时启动Activity ComponentInfo

[英]unable to start Activity ComponentInfo on resume

My app works fine but when the app goes to the background it crashes when it should resume. 我的应用程序运行良好,但是当应用程序进入后台运行时,它崩溃了,应该恢复运行。 As you can see in the source code I log the onStart, onStop etcetera events. 如您在源代码中看到的,我记录了onStart,onStop等事件。

In my log I can see onStart, onResume when I start the app. 在我的日志中,启动应用程序时可以看到onStart,onResume。 When I press the back-key I see: onStop, STOP, onPause and onDestroy. 当我按返回键时,我看到:onStop,STOP,onPause和onDestroy。

When I try to restart the app it crashes immediately, no further messages are in the log except 'unable to start Activity ComponentInfo java lang.NullPointerException. 当我尝试重新启动应用程序时,该应用程序立即崩溃,除了“无法启动Activity ComponentInfo java lang.NullPointerException”外,日志中没有其他消息。

How can I prevent this? 我该如何预防?

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 I changed the following: 好的,我更改了以下内容:

   private void startConnection() {

    if (connection != null ) {

        Log.i("CONN", "RUNNING");

    } else {

        Log.i("CONN", "START");

        try {
            initConnection();
        } catch (XMPPException e) {
            e.printStackTrace();
        }
    }
}

I start the app, everything works fine. 我启动应用程序,一切正常。 Log: 日志:

05-12 08:40:21.743: D/AndroidRuntime(491): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 05-12 08:40:21.743: D/AndroidRuntime(491): CheckJNI is ON 05-12 08:40:21.743:D / AndroidRuntime(491):>>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 05-12 08 :40:21.743:D / AndroidRuntime(491):CheckJNI已打开

05-12 08:40:22.065: D/AndroidRuntime(491): --- registering native functions --- 05-12 08:40:22.065:D / AndroidRuntime(491):-注册本机函数-

05-12 08:40:23.353: D/AndroidRuntime(491): Shutting down VM 05-12 08:40:23.353:D / AndroidRuntime(491):关闭VM

05-12 08:40:23.363: D/dalvikvm(491): Debugger has detached; 05-12 08:40:23.363:D / dalvikvm(491):调试器已分离; object registry had 1 entries 对象注册表有1个条目

05-12 08:40:23.393: I/AndroidRuntime(491): NOTE: attach of thread 'Binder Thread #3' failed 05-12 08:40:23.393:I / AndroidRuntime(491):注意:线程'Binder线程#3'的附加失败

05-12 08:40:24.184: D/AndroidRuntime(499): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 05-12 08:40:24.184:D / AndroidRuntime(499):>>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<<

05-12 08:40:24.184: D/AndroidRuntime(499): CheckJNI is ON 05-12 08:40:24.184:D / AndroidRuntime(499):CheckJNI已开启

05-12 08:40:24.523: D/AndroidRuntime(499): --- registering native functions --- 05-12 08:40:24.523:D / AndroidRuntime(499):-注册本机函数-

05-12 08:40:25.873: I/ActivityManager(70): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=nl.yeswecanclinics.chat/.Start } 05-12 08:40:25.873:I / ActivityManager(70):开始活动:意图{act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10000000 cmp = nl.yeswecanclinics。聊天/。开始}

05-12 08:40:25.965: D/AndroidRuntime(499): Shutting down VM 05-12 08:40:25.965:D / AndroidRuntime(499):关闭VM

05-12 08:40:25.973: D/dalvikvm(499): Debugger has detached; 05-12 08:40:25.973:D / dalvikvm(499):调试器已分离; object registry had 1 entries 对象注册表有1个条目

05-12 08:40:26.034: I/AndroidRuntime(499): NOTE: attach of thread 'Binder Thread #3' failed 05-12 08:40:26.034:I / AndroidRuntime(499):注意:线程'Binder线程#3'的附加失败

05-12 08:40:26.105: I/ActivityManager(70): Start proc nl.yeswecanclinics.chat for activity nl.yeswecanclinics.chat/.Start: pid=506 uid=10032 gids={3003, 1015} 05-12 08:40:26.105:I / ActivityManager(70):启动proc nl.yeswecanclinics.chat进行活动nl.yeswecanclinics.chat/。开始:pid = 506 uid = 10032 gids = {3003,1015}

05-12 08:40:27.843: I/global(506): Default buffer size used in BufferedReader constructor. 05-12 08:40:27.843:I / global(506):BufferedReader构造函数中使用的默认缓冲区大小。 It would be better to be explicit if an 8k-char buffer is required. 如果需要8k字符缓冲区,则最好是明确的。

05-12 08:40:27.843: I/global(506): Default buffer size used in BufferedWriter constructor. 05-12 08:40:27.843:I / global(506):BufferedWriter构造函数中使用的默认缓冲区大小。 It would be better to be explicit if an 8k-char buffer is required. 如果需要8k字符缓冲区,则最好是明确的。

05-12 08:40:28.294: W/System.err(506): java.security.KeyStoreException: KeyStore jks implementation not found 05-12 08:40:28.294:W / System.err(506):java.security.KeyStoreException:找不到KeyStore jks实现

05-12 08:40:28.294: W/System.err(506): at java.security.KeyStore.getInstance(KeyStore.java:134) 05-12 08:40:28.294:W / System.err(506):at java.security.KeyStore.getInstance(KeyStore.java:134)

05-12 08:40:28.294: W/System.err(506): at org.jivesoftware.smack.ServerTrustManager.(ServerTrustManager.java:61) 05-12 08:40:28.294:W / System.err(506):位于org.jivesoftware.smack.ServerTrustManager。(ServerTrustManager.java:61)

05-12 08:40:28.294: W/System.err(506): at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:832) 05-12 08:40:28.294:W / System.err(506):在org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:832)

05-12 08:40:28.304: W/System.err(506): at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:268) 05-12 08:40:28.304:W / System.err(506):位于org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:268)

05-12 08:40:28.304: W/System.err(506): at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44) 05-12 08:40:28.304:W / System.err(506):在org.jivesoftware.smack.PacketReader.access $ 000(PacketReader.java:44)

05-12 08:40:28.313: W/System.err(506): at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:71) 05-12 08:40:28.313:W / System.err(506):在org.jivesoftware.smack.PacketReader $ 1.run(PacketReader.java:71)

05-12 08:40:29.004: I/global(506): Default buffer size used in BufferedReader constructor. 05-12 08:40:29.004:I / global(506):BufferedReader构造函数中使用的默认缓冲区大小。 It would be better to be explicit if an 8k-char buffer is required. 如果需要8k字符缓冲区,则最好是明确的。

05-12 08:40:29.014: I/global(506): Default buffer size used in BufferedWriter constructor. 05-12 08:40:29.014:I / global(506):BufferedWriter构造函数中使用的默认缓冲区大小。 It would be better to be explicit if an 8k-char buffer is required. 如果需要8k字符缓冲区,则最好是明确的。

05-12 08:40:29.483: D/dalvikvm(506): GC_FOR_MALLOC freed 3668 objects / 280752 bytes in 153ms 05-12 08:40:29.483:D / dalvikvm(506):GC_FOR_MALLOC在153毫秒内释放了3668个对象/ 280752字节

05-12 08:40:29.663: I/CONN(506): onStart 05-12 08:40:29.663:I / CONN(506):onStart

05-12 08:40:29.685: I/CONN(506): RUNNING 05-12 08:40:29.685:I / CONN(506):正在运行

05-12 08:40:29.685: I/CONN(506): onResume 05-12 08:40:29.685:I / CONN(506):onResume

05-12 08:40:29.693: I/CONN(506): RUNNING 05-12 08:40:29.693:I / CONN(506):正在运行

05-12 08:40:30.633: I/ActivityManager(70): Displayed activity nl.yeswecanclinics.chat/.Start: 4712 ms (total 384269 ms) 05-12 08:40:30.633:I / ActivityManager(70):显示的活动nl.yeswecanclinics.chat/。开始:4712 ms(总计384269 ms)

05-12 08:40:37.114: D/dalvikvm(175): GC_EXPLICIT freed 444 objects / 22064 bytes in 122ms 05-12 08:40:37.114:D / dalvikvm(175):GC_EXPLICIT在122ms内释放了444个对象/ 22064个字节

I PRESS THE BACK BUTTON 我按下后背按钮

05-12 08:41:07.253: W/KeyCharacterMap(506): No keyboard for id 0 05-12 08:41:07.253:W / KeyCharacterMap(506):ID为0的无键盘

05-12 08:41:07.253: W/KeyCharacterMap(506): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 05-12 08:41:07.253:W / KeyCharacterMap(506):使用默认键盘映射:/system/usr/keychars/qwerty.kcm.bin

05-12 08:41:07.403: I/CONN(506): onPause 05-12 08:41:07.403:I / CONN(506):暂停

05-12 08:41:07.403: I/CONN(506): STOP 05-12 08:41:07.403:I / CONN(506):停止

05-12 08:41:07.784: W/InputManagerService(70): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@45066cf8 (uid=10032 pid=506) 05-12 08:41:07.784:W / InputManagerService(70):在非重点客户端com.android.internal.view.IInputMethodClient$Stub$Proxy@45066cf8(uid = 10032 pid = 506)上开始输入

05-12 08:41:07.804: W/IInputConnectionWrapper(506): showStatusIcon on inactive InputConnection 05-12 08:41:07.804:W / IInputConnectionWrapper(506):无效InputConnection上的showStatusIcon

05-12 08:41:08.173: I/CONN(506): onStop 05-12 08:41:08.173:I / CONN(506):onStop

05-12 08:41:08.173: I/CONN(506): onDestroy 05-12 08:41:08.173:I / CONN(506):onDestroy

I RESTART THE APP BY CLICKING THE ICON 我通过点击图标重新启动应用程序

05-12 08:41:30.583: I/global(506): Default buffer size used in BufferedReader constructor. 05-12 08:41:30.583:I / global(506):BufferedReader构造函数中使用的默认缓冲区大小。 It would be better to be explicit if an 8k-char buffer is required. 如果需要8k字符缓冲区,则最好是明确的。

05-12 08:41:30.623: I/global(506): Default buffer size used in BufferedWriter constructor. 05-12 08:41:30.623:I / global(506):BufferedWriter构造函数中使用的默认缓冲区大小。 It would be better to be explicit if an 8k-char buffer is required. 如果需要8k字符缓冲区,则最好是明确的。

05-12 08:41:31.663: W/System.err(506): java.security.KeyStoreException: KeyStore jks implementation not found 05-12 08:41:31.663:W / System.err(506):java.security.KeyStoreException:找不到KeyStore jks实现

05-12 08:41:31.663: W/System.err(506): at java.security.KeyStore.getInstance(KeyStore.java:134) 05-12 08:41:31.663:W / System.err(506):位于java.security.KeyStore.getInstance(KeyStore.java:134)

05-12 08:41:31.663: W/System.err(506): at org.jivesoftware.smack.ServerTrustManager.(ServerTrustManager.java:61) 05-12 08:41:31.663:W / System.err(506):位于org.jivesoftware.smack.ServerTrustManager。(ServerTrustManager.java:61)

05-12 08:41:31.674: W/System.err(506): at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:832) 05-12 08:41:31.674:W / System.err(506):在org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:832)

05-12 08:41:31.674: W/System.err(506): at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:268) 05-12 08:41:31.674:W / System.err(506):位于org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:268)

05-12 08:41:31.683: W/System.err(506): at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44) 05-12 08:41:31.683:W / System.err(506):在org.jivesoftware.smack.PacketReader.access $ 000(PacketReader.java:44)

05-12 08:41:31.683: W/System.err(506): at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:71) 05-12 08:41:31.683:W / System.err(506):在org.jivesoftware.smack.PacketReader $ 1.run(PacketReader.java:71)

05-12 08:41:31.984: I/global(506): Default buffer size used in BufferedReader constructor. 05-12 08:41:31.984:I / global(506):BufferedReader构造函数中使用的默认缓冲区大小。 It would be better to be explicit if an 8k-char buffer is required. 如果需要8k字符缓冲区,则最好是明确的。

05-12 08:41:31.994: I/global(506): Default buffer size used in BufferedWriter constructor. 05-12 08:41:31.994:I / global(506):BufferedWriter构造函数中使用的默认缓冲区大小。 It would be better to be explicit if an 8k-char buffer is required. 如果需要8k字符缓冲区,则最好是明确的。

05-12 08:41:32.043: D/AndroidRuntime(506): Shutting down VM 05-12 08:41:32.043:D / AndroidRuntime(506):关闭VM

05-12 08:41:32.043: W/dalvikvm(506): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 05-12 08:41:32.043:W / dalvikvm(506):threadid = 1:线程以未捕获的异常退出(group = 0x4001d800)

05-12 08:41:32.214: D/dalvikvm(506): GC_FOR_MALLOC freed 5507 objects / 388504 bytes in 147ms 05-12 08:41:32.214:D / dalvikvm(506):GC_FOR_MALLOC在147毫秒内释放了5507个对象/ 388504字节

05-12 08:41:32.226: D/NativeCrypto(506): Freeing OpenSSL session 05-12 08:41:32.226:D / NativeCrypto(506):释放OpenSSL会话

05-12 08:41:32.234: E/AndroidRuntime(506): FATAL EXCEPTION: main 05-12 08:41:32.234:E / AndroidRuntime(506):致命异常:主要

05-12 08:41:32.234: E/AndroidRuntime(506): java.lang.RuntimeException: Unable to start activity ComponentInfo{nl.yeswecanclinics.chat/nl.yeswecanclinics.chat.Start}: java.lang.NullPointerException 05-12 08:41:32.234:E / AndroidRuntime(506):java.lang.RuntimeException:无法启动活动ComponentInfo {nl.yeswecanclinics.chat/nl.yeswecanclinics.chat.Start}:java.lang.NullPointerException

05-12 08:41:32.234: E/AndroidRuntime(506): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 05-12 08:41:32.234:E / AndroidRuntime(506):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)

05-12 08:41:32.234: E/AndroidRuntime(506): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 05-12 08:41:32.234:E / AndroidRuntime(506):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

05-12 08:41:32.234: E/AndroidRuntime(506): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 05-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): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 05-12 08:41:32.234:E / AndroidRuntime(506):位于android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)

05-12 08:41:32.234: E/AndroidRuntime(506): at android.os.Handler.dispatchMessage(Handler.java:99) 05-12 08:41:32.234:E / AndroidRuntime(506):位于android.os.Handler.dispatchMessage(Handler.java:99)

05-12 08:41:32.234: E/AndroidRuntime(506): at android.os.Looper.loop(Looper.java:123) 05-12 08:41:32.234:E / AndroidRuntime(506):位于android.os.Looper.loop(Looper.java:123)

05-12 08:41:32.234: E/AndroidRuntime(506): at android.app.ActivityThread.main(ActivityThread.java:4627) 05-12 08:41:32.234:E / AndroidRuntime(506):位于android.app.ActivityThread.main(ActivityThread.java:4627)

05-12 08:41:32.234: E/AndroidRuntime(506): at java.lang.reflect.Method.invokeNative(Native Method) 05-12 08:41:32.234:E / AndroidRuntime(506):at java.lang.reflect.Method.invokeNative(本机方法)

05-12 08:41:32.234: E/AndroidRuntime(506): at java.lang.reflect.Method.invoke(Method.java:521) 05-12 08:41:32.234:E / AndroidRuntime(506):at java.lang.reflect.Method.invoke(Method.java:521)

05-12 08:41:32.234: E/AndroidRuntime(506): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 05-12 08:41:32.234: E/AndroidRuntime(506): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 05-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):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

05-12 08:41:32.234: E/AndroidRuntime(506): at dalvik.system.NativeStart.main(Native Method) 05-12 08:41:32.234:E / AndroidRuntime(506):在dalvik.system.NativeStart.main(本机方法)

05-12 08:41:32.234: E/AndroidRuntime(506): Caused by: java.lang.NullPointerException 05-12 08:41:32.234:E / AndroidRuntime(506):由:java.lang.NullPointerException

05-12 08:41:32.234: E/AndroidRuntime(506): at org.jivesoftware.smackx.muc.MultiUserChat$1.connectionCreated(MultiUserChat.java:114) 05-12 08:41:32.234:E / AndroidRuntime(506):在org.jivesoftware.smackx.muc.MultiUserChat $ 1.connectionCreated(MultiUserChat.java:114)

05-12 08:41:32.234: E/AndroidRuntime(506): at org.jivesoftware.smack.XMPPConnection.initConnection(XMPPConnection.java:618) 05-12 08:41:32.234:E / AndroidRuntime(506):在org.jivesoftware.smack.XMPPConnection.initConnection(XMPPConnection.java:618)

05-12 08:41:32.234: E/AndroidRuntime(506): at org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:565) 05-12 08:41:32.234:E / AndroidRuntime(506):位于org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:565)

05-12 08:41:32.234: E/AndroidRuntime(506): at org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:991) 05-12 08:41:32.234:E / AndroidRuntime(506):在org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:991)

05-12 08:41:32.234: E/AndroidRuntime(506): at nl.yeswecanclinics.chat.Start.initConnection(Start.java:131) 05-12 08:41:32.234:E / AndroidRuntime(506):位于nl.yeswecanclinics.chat.Start.initConnection(Start.java:131)

05-12 08:41:32.234: E/AndroidRuntime(506): at nl.yeswecanclinics.chat.Start.onCreate(Start.java:71) 05-12 08:41:32.234:E / AndroidRuntime(506):位于nl.yeswecanclinics.chat.Start.onCreate(Start.java:71)

05-12 08:41:32.234: E/AndroidRuntime(506): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 05-12 08:41:32.234:E / AndroidRuntime(506):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

05-12 08:41:32.234: E/AndroidRuntime(506): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 05-12 08:41:32.234:E / AndroidRuntime(506):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

05-12 08:41:32.234: E/AndroidRuntime(506): ... 11 more 05-12 08:41:32.234:E / AndroidRuntime(506):...还有11个

While Marek's answer is certainly not incorrect (this may in fact be why you are getting a NullPointerException ), one thing I know is that you shouldn't be attempting to make connections on the UI thread. 尽管Marek的回答肯定不是不正确的(事实上这可能就是为什么您得到NullPointerException ),但我知道的一件事是,您不应该尝试在UI线程上建立连接。 This will inevitably cause your application to crash in the case that it takes more than a couple seconds to make a connection. 如果连接需要花费多于几秒钟的时间,这将不可避免地导致您的应用程序崩溃。 You should make an AsnycTask and do your connection and status changes there. 您应该执行一个AsnycTask并在那里进行连接和状态更改。

You set in stopConnection method null to connection so when you try to do check if(connection.isConnected()) you receive null because you set it. 您在stopConnection方法stopConnection null设置为connection因此当您尝试检查if(connection.isConnected())会收到null因为您对其进行了设置。 You should check in startConnection method if connection is not null otherwise you must call initConnection method. 如果connection不为null则应签入startConnection方法,否则必须调用initConnection方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM