0

我可以在Main layout和MainActivity java上用一個按鈕讀寫TCP/IP緩衝區。Android tcp/ip讀取和寫入緩衝區主要代碼

但不能這樣做不同的片段或不同的佈局。

錯誤信息是:

顯示java.lang.NullPointerException:嘗試一個空對象上調用虛擬方法 '無效com.example.murat.ev.TcpClient.sendMessage(java.lang.String中)'參考

我的代碼:

MainActivity.java

public class MainActivity extends AppCompatActivity { 
public TcpClient mTcpClient; 
public Thread send_data; 
public Button button; 
public byte data[]=new byte[1024]; 

public DatabaseConstruction db; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    db = new DatabaseConstruction(getApplicationContext()); 
    new datasync().execute(""); 

    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    Fragment1 fragment1=new Fragment1(); 
    fragmentTransaction.replace(R.id.container, fragmen1_layout); 
    fragmentTransaction.commit(); 

    button=(Button)findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      send_data_pre(); 
     } 
    }); 
} 

public class datasync extends AsyncTask<String, String, TcpClient> 
{ 
    @Override 
    protected TcpClient doInBackground(String... message) 
    { 
     //we create a TCPClient object and 
     mTcpClient = new TcpClient(new TcpClient.OnMessageReceived() 
     { 
      @Override 
      //here the messageReceived method is implemented 
      public void messageReceived(String message) 
      { 
       Log.i("Debug","Input message: " + message); 
       publishProgress(message); 
      } 
     }); 

     mTcpClient.run(); 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(String... values) 
    { 
     super.onProgressUpdate(values); 
     Log.i("onProgressUpdate",values[0]); 
    } 
} 


public void send_data_pre() 
{ 
    send_data = new Thread(new send_data("hello")); 
    send_data.start(); 
} 

public class send_data implements Runnable 
{ 
    private String message; 
    public send_data (String message) 
    { 
     this.message = message; 
    } 
    @Override 
    public void run() 
    { 
     mTcpClient.sendMessage(message); 
     Log.i("Debug", "mesaj did send"); 
    } 
    } 
} 

Fragment1.java

public class Fragment1 extends Fragment { 
Button button1; 
MainActivity main=new MainActivity(); 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{ 
    View view = inflater.inflate(R.layout.fragment1_layout, container, false); 
    button1 =(Button)view.findViewById(R.id.buton_1); 
    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      main.send_data(); ////THIS HERE IS APP STOP AND ERROR 
     } 
    }); 
    return view; 
    } 
} 

回答

0

也許在片段你想要做 main.send_data_pre(); insted的的 main.send_data(); 就像你在MainActivity中的OnCreate()做,如果我理解你的問題很好。