![](/img/trans.png)
[英]Java - I need to use a variable boolean inside the main method, initialized outside but within the same class
[英]How to use a variable defined inside a method use outside the method in another method on the same Class in java
我正在开发一个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();
}
}
}
现在在上方的第156行,您可以看到一个session.send(“ hi”,true); 每当我连接到服务器时,它都会向服务器发送一条消息,但是我想在Sendit(v)方法中使用此消息,当用户按下屏幕上的按钮时会调用该方法,以便它可以向服务器发送用户定义的消息,但是我无法做到这一点,因为会话变量是在OmgeleChatOn函数中定义的,并且我无法在该方法之外使用它,该怎么做,我尝试了很多搜索,但发现了正确答案,请帮忙吗?
如果要在建立连接后发送hi
消息,则应将该行放在chatConnected()
回调方法中。 原因是,即使您未连接,也可能尝试发送消息。 我不知道Omegle API,但是我想这就是为什么您在OmegleEventAdaptor
具有回调方法的OmegleEventAdaptor
。
此外,如果要在此回调类之外发送消息,则应将会话分配给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
访问会话对象,例如,如果单击了按钮。
实际上,我自己找到了问题的解决方案,我尝试在mainActivity类和onclick中使用session.send。 它就像一个魅力。 这是代码->
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) {
try {
session.send(m_edt.getText().toString());
m_edt.setText("");
} catch (OmegleException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
现在代码运行顺利
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.