Не могу публиковать сообщения im rabbitmq с androidStudio - PullRequest
0 голосов
/ 24 ноября 2018

Моя проблема в том, что мне нужно поместить сообщение в брокер rabbitmq.Я видел много примеров github, и они не удовлетворяют моему случаю.Давайте перейдем к проблеме, я думаю, что для подключения в rabbitmq мне нужно создать поток (каждый раз, когда я делаю это без потоков, он не работает), и переменные, которые я назначаю внутри потока, не выходят из-за этого мой basicPublish делаетне работа.Может кто-нибудь помочь мне?

код:

public class MainActivity extends AppCompatActivity {
    Connection connection = null;
    Channel ch = null;
    ConnectionFactory factory = new ConnectionFactory();

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupConnectionFactory();
        publishToAMQP();
        setupPubButton();
    }
    void setupPubButton() {
        Button button = (Button) findViewById(R.id.publish);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                EditText et = (EditText) findViewById(R.id.text);
                publishMessage(et.getText().toString());
                et.setText("");
            }
        });
    }

    public void setupConnectionFactory() {
        try {
            factory.setUsername("guest");
            factory.setPassword("guest");
            factory.setVirtualHost("/");
            factory.setHost("localhost");
            factory.setPort(5672);
            Log.d("","foi");
        }
        catch(Exception e){
            Log.d("IOAJSOIUA", e.getMessage());
        }
    }

    public void publishToAMQP()
    {
        Thread connectChannel = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    connection = factory.newConnection();
                    ch = connection.createChannel();
                    ch.queueDeclare("chat", false, false, false, null);
                    ch.exchangeDeclare("amq.topic", "topic",true);
                    ch.queueBind("amq.topic", "chat", null);
                    Log.d("", "isso");
                } catch (Exception e) {
                    Log.d("", "Connection broken: " + e.getClass().getName());
                }
            }
        });
        connectChannel.start();
    }

    void publishMessage(String message) {
        Thread publishMessage = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    ch.basicPublish("amq.topic", "chat", null, message.getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        publishMessage.start();
    }
}

ошибка:

E/AndroidRuntime: FATAL EXCEPTION: Thread-4
    Process: com.example.youssef.chatbot, PID: 11432
    java.lang.NullPointerException: Attempt to invoke interface method 'void com.rabbitmq.client.Channel.basicPublish(java.lang.String, java.lang.String, com.rabbitmq.client.AMQP$BasicProperties, byte[])' on a null object reference
        at com.example.youssef.chatbot.Activities.Activities.MainActivity$3.run(MainActivity.java:89)
        at java.lang.Thread.run(Thread.java:764)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...