首页 > 解决方案 > 使用意图从类向 MainActivity 发送数据时出错

问题描述

在我的 MainActivity 中,我需要知道布尔类型变量的状态以隐藏或使图标可见,但是这个变量是在另一个名为 TcpClient 的类中生成的,该类被 MainActivity 调用了几次,我正在尝试使用意图发送这个TcpClient 类中的变量,但我有错误。

这是我的 MainActivity 代码:

public class MainActivity extends AppCompatActivity implements 
NavigationView.OnNavigationItemSelectedListener {
private TcpClient mTcpClient;
public boolean statusWIFI = false;
.
.
public class ConnectTask extends AsyncTask<String, String, TcpClient> {
    @Override
    protected TcpClient doInBackground(String... message) {
        mTcpClient = new TcpClient(new TcpClient.OnMessageReceived() {
            @Override
            //here the messageReceived method is implemented
            public void messageReceived(String message) {           //we create a TCPClient object and
                publishProgress(message);                   //this method calls the onProgressUpdate
            }
        });
        mTcpClient.run();
        return null;
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        //arrayList.add("RX: " + values[0]);                 //in the 
    arrayList we add the messaged received from server
        mDumpTextView.append( values[0] );
        mDumpTextView.append( "\n" );
        mScrollView.smoothScrollTo( 0, mDumpTextView.getBottom() );

        mAdapter.notifyDataSetChanged();                   // notify the 
    adapter that the data set has changed. This means that new message 
    received
        // from server was added to the list
    }

}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

MenuItem IconWIFI = menu.findItem(R.id.bt1_wifi);

Intent intent = getIntent();
Bundle bundle = null;
bundle = getIntent().getExtras();

if (bundle !=null) {
    statusWIFI = bundle.getBoolean( "mstatusWIFI");
}

if (statusWIFI == true){
    IconUsbON.setVisible(true);
}else{
    IconUsbON.setVisible(false);
}

return true;
}

这是我的 TcpClient 类的代码:

public class TcpClient {
private Boolean statusWIFIX = false;
.
.
public void stopClient() {

statusWIFIX = false;
Intent intent = new Intent( this, MainActivity.class );
intent.putExtra( "mstatusWIFI", statusWIFIX );
startActivityForResult( intent, 0 );

sendMessage(Constants.CLOSED_CONNECTION+": " + Modelox);                
// send message that we are closing the connection
mRun = false;
if (mBufferOut != null) {
    mBufferOut.flush();
    mBufferOut.close();
}
mMessageListener = null;
mBufferIn = null;
mBufferOut = null;
mServerMessage = null;
}

这是错误;有人可以告诉我如何纠正这个

在此处输入图像描述

标签: android

解决方案


我没有看到任何初始化mTcpClient,你需要像这样初始化它:

mTcpClient= TcpClient(); 

如果您的变量在 TcpClient 类中,您可以通过mTcpClient.statusWIFIX

您还需要像这样公开 statusWIFIX 范围:

public Boolean statusWIFIX = false;

在你的TcpClient课上。

您也可以通过意图发送数据,但仅用于访问 statusWIFIX 以再次启动活动不是一个好方法。


推荐阅读