java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法

我正在尝试使用 WiFip2p 创建一个聊天应用程序。一切都在这个应用程序中完成。在发送和接收消息应用程序运行良好之前。在那之后,我得到了这个错误。当我连接到另一台设备时出现此错误。它显示了一个空对象引用。我不知道为什么我需要一个解决方案,任何人都可以帮助我谢谢。


 public class WiFi_Activity extends AppCompatActivity {



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_wi_fi_);


        FINDVIEWBYID();

        CLICKLISTINER();

    }



    Handler handler=new Handler(new Handler.Callback() {

        @Override

        public boolean handleMessage(Message msg) {


            switch (msg.what)

            {

                case MESSAGE_READ:


                    byte[]  readbuffer=(byte[])msg.obj;

                    String tempmez=new String(readbuffer,0,msg.arg1);

                    txt_message.setText(tempmez);

                    break;

            }


            return true;

        }

    });


    private void FINDVIEWBYID() {


            btn_onoff=findViewById(R.id.onOff);

            btn_discover=findViewById(R.id.discover);

            btn_send=findViewById(R.id.sendButton);

            listView=findViewById(R.id.peerListView);

            txt_connectionsts=findViewById(R.id.connectionStatus);

            txt_message=findViewById(R.id.readMsg);

            edit_message=findViewById(R.id.writeMsg);


        wifiManager= (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);


        wifiP2pManager= (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);


        channel=wifiP2pManager.initialize(this,getMainLooper(),null);


        broadcastReceiver=new Wifi_broadcast_reciever(wifiP2pManager,channel,this);


        intentFilter=new IntentFilter();


        intentFilter.addAction(wifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);

        intentFilter.addAction(wifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);

        intentFilter.addAction(wifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);

        intentFilter.addAction(wifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);


    }

   

呼唤远方
浏览 298回答 2
2回答

慕勒3428872

我能看到的唯一问题是您正在捕获(并忽略)来自getInputStream()和 的错误getOutputStream()。异常是停止执行,因此如果getInputStream()出现错误,则不会设置。您的两个流都将为空。由于您至少要打印堆栈跟踪,因此请在实际崩溃之前检查其他堆栈跟踪。它可能会告诉您更多关于出了什么问题的信息。为了解决这个问题,我建议不要捕捉异常,而是让构造函数 throw IOException。如果你早点抓住它,它会给你以后带来更少的麻烦。编辑:我已经多看了你的课程,我发现你没有设置时间的地址Socket。在获取数据流之前执行此操作。不使用字段将起作用。private Socket socket;public SendRecieve(Socket skt) {    this.socket = skt;}@Overridepublic void run() {    try {        InputStream in = socket.getInputStream();        ... etc    } ...}

至尊宝的传说

您在 Clientclas 运行执行之前调用 Sendreceiver start,因此需要执行以下操作:public class Clientclass extends Thread {Socket socket;String host_address;public Clientclass(InetAddress hostaddress){    host_address=hostaddress.getHostAddress();    socket=new Socket();}@Overridepublic void run() {    try {        socket.connect(new InetSocketAddress(host_address,1111),500);    sendRecieve=new SendRecieve(socket);    sendRecieve.start();    } catch (IOException e) {        e.printStackTrace();    }}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java