简体   繁体   English

执行套接字编程时java.lang.nullPointerException ..如何使用相同的套接字对象

[英]java.lang.nullPointerException while performing Socket programming..How to use same socket object

Password.java 密码.java

package com.example.vnc;

import java.io.IOException;
import java.io.PrintWriter;

import java.net.UnknownHostException;


import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class Password extends MainActivity{

 Button submit;
   EditText pass;
   String data;

  @Override
   public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sec);
submit=(Button) findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        pass=(EditText)findViewById(R.id.editText1);
        data=pass.getText().toString();

            try{
                PrintWriter out=new PrintWriter(soc.getOutputStream(),true);
                out.write(data);
                out.close();
            }
            catch(UnknownHostException e)
            {
                e.printStackTrace();
            }
            catch (IOException e) {
                 e.printStackTrace();
                }



    Intent next2=new Intent(Password.this,Security.class);
        startActivity(next2);
    }
});

} }

MainActivity.java MainActivity.java

   package com.example.vnc;

   import java.io.IOException;
   import java.net.Socket;
   import java.net.UnknownHostException;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    public class MainActivity extends Activity
    {
   Button connect;
   EditText ipadd,portadd;
   Socket soc;
    String ip,port;
      int port1;
     public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
  connect=(Button) findViewById(R.id.button1);
  connect.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        ipadd=(EditText) findViewById(R.id.editText1);
        portadd=(EditText) findViewById(R.id.editText2);
        ip=ipadd.getText().toString();
        port=portadd.getText().toString();
        port1=Integer.parseInt(port);

    new Thread(new Runnable()
    {
        public void run()
        {
        try{
            soc=new Socket(ip,port1);
        }
        catch(UnknownHostException e)
        {
            e.printStackTrace();
        }
        catch (IOException e) {
             e.printStackTrace();
            }
        }
    }).start();

        Toast.makeText(MainActivity.this,"Connecting to Server"+ip,Toast.LENGTH_LONG).show();

        Intent next1=new Intent(MainActivity.this,Password.class);

        startActivity(next1);

    }
  });
}

} }

This is in android. 这是在android中。 the MainActivity class has Socket connection and I am extending the MainActivity class. MainActivity类具有Socket连接,我正在扩展MainActivity类。 I am using the same socket soc at printwriter and it gives me error null pointer exception at printwriter line. 我在printwriter使用相同的socket soc,它在printwriter行给了我错误null指针异常。

Please tell me what to do? 请告诉我应该怎么做? how can I use same socket over 2 class 我如何在2类上使用相同的套接字

The instance of Password is different from the MainActivity instance. Password实例与MainActivity实例不同。 Hence they do nog share state, and thus the soc instance var is empty. 因此,它们不共享状态,因此soc实例var为空。 You might try to pass it along when you start the Password activity. 您可能尝试在启动“ Password活动时将其传递。 You can do that using Intent.putExtra . 您可以使用Intent.putExtra做到这Intent.putExtra

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

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