1

私は、omegleサーバーに接続し、見知らぬ人からメッセージを受信したAndroidアプリに取り組んでいます. 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) メソッドでこれを使用して、ユーザー定義のメッセージをサーバーに送信できるようにしますが、私はセッション変数は OmgeleChatOn 関数で定義されているため、それを行うことはできません。そのメソッドの外で使用することはできません。これを行う方法は、たくさん検索しようとしましたが、正しい答えが見つかりませんでした。助けてください。

4

2 に答える 2

0

実際、私は自分で問題の解決策を見つけました。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();
            }

            }
        });

そして今、コードはスムーズに動作します

于 2013-07-07T14:21:46.093 に答える
0

hi接続が確立された後にメッセージを送信する場合は、chatConnected()代わりにコールバック メソッドに行を配置する必要があります。これは、接続していなくてもメッセージを送信しようとする可能性があるためです。Omegle API についてはわかりませんが、それが にコールバック メソッドがある理由だと思います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次に、たとえばボタンがクリックされた場合などに、単純に からセッション オブジェクトにアクセスできます。

于 2013-07-07T13:53:00.430 に答える