gpt4 book ai didi

java - 如何使用在方法内部定义的变量在java中同一类的另一个方法中使用方法外部

转载 作者:行者123 更新时间:2023-12-01 04:34:36 24 4
gpt4 key购买 nike

我正在开发一个android应用程序,它连接到omegle服务器,收到来自陌生人的消息,因为有一个完整的API,有一个方法send(message)可以向服务器发送消息,但它可以用作 session.send(mesage),因为 session 是保存 omeglesession 值的变量,现在这是我的代码 -->

MainActivity.java

package com.example.com.omegle.test;

import org.nikki.omegle.Omegle;
import org.nikki.omegle.core.OmegleException;
import org.nikki.omegle.core.OmegleMode;
import org.nikki.omegle.core.OmegleSession;
import org.nikki.omegle.event.OmegleEventAdaptor;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

TextView txt;
Button m_btn;
EditText m_edt;
OmegleSession session;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

m_btn = (Button)findViewById(R.id.button);
m_edt = (EditText)findViewById(R.id.type);
m_btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

sendIt(v);

}
});
m_btn.setClickable(false);
OmegleChat om=new OmegleChat();
om.execute();
}



protected void sendIt(View v)
{

txt.append("You: "+m_edt.getText().toString());
m_edt.setText("");

try {
this.session.send(m_edt.getText().toString());
} catch (OmegleException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}





private class OmegleChat extends AsyncTask<Void, Void, Void> {



@Override
protected void onPreExecute() {

txt=(TextView)findViewById(R.id.omegle);
txt.append("Omegele Connection Started... \n");

}

@Override
protected void onProgressUpdate(Void... values) {

}
@Override

protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
OmgeleChatOn();
return null;
}

@Override
protected void onPostExecute(Void result) {


}
}

public void OmgeleChatOn()
{

Omegle omegle = new Omegle();

try {

System.out.println("Opening session...");

this.session = omegle.openSession(OmegleMode.NORMAL, new OmegleEventAdaptor() {

@Override
public void chatWaiting(OmegleSession session) {
System.out.println("Waiting for chat...");
}


@Override
public void chatConnected(OmegleSession session) {
System.out.println("You are now talking to a random stranger!");
}

@Override
public void chatMessage(final OmegleSession session, final String message) {
System.out.println("Stranger: " + message);
runOnUiThread(new Runnable() {

@Override
public void run() {

txt.append("Stranger:"+message+"\n");
m_btn.setClickable(true);

}

});

}

@Override
public void messageSent(OmegleSession session, final String string) {
System.out.println("You: " + string);
}

@Override
public void strangerDisconnected(OmegleSession session) {
System.out.println("Stranger disconnected, goodbye!");
//System.exit(0);
}

@Override
public void omegleError(OmegleSession session, String string) {
System.out.println("ERROR! " + string);
System.exit(1);
}



});

//HERE I WANT TO USE session.send(msg_from_edit_text) HOW TO DO THAT AS I HAVE A FUNCTION sendIt(v) above this method
session.send("hi",true);


} catch (OmegleException e) {
e.printStackTrace();
}



}




}

现在在上面 catch 的第 156 行你可以看到一个 session.send("hi",true);每当我连接到服务器时,它都会向服务器发送一条消息,但我想在 Sendit(v) 方法中使用它,当用户从屏幕上按下按钮时会调用该方法,以便它可以向服务器发送用户定义的消息,但我不能这样做,因为 session 变量是在 OmgeleChatOn 函数中定义的,我不能在该方法之外使用它,如何做到这一点,我尝试搜索很多,但没有找到正确的答案,请帮忙?

最佳答案

如果您想在建立连接后发送 hi 消息,则应将该行放在 chatConnected() 回调方法中。原因是,即使没有连接,您也可能会尝试发送消息。我不了解 Omegle API,但我认为这就是您在 OmegleEventAdaptor 中拥有回调方法的原因。

此外,如果您想在此回调类之外发送消息,您应该将 session 分配给 MainActivity 的实例字段:

@Override
public void chatConnected(OmegleSession session) {
System.out.println("You are now talking to a random stranger!");
session.send("hi", true);
MainActivity.this.session = session;
}

然后您可以简单地从 MainActivity 访问 session 对象,例如如果单击按钮。

关于java - 如何使用在方法内部定义的变量在java中同一类的另一个方法中使用方法外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17512359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com