有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法在Android Studio上运行我的MQTT应用程序

我正在测试一个个人MQTT应用程序,但当我点击connect按钮时,它失败了。。。有一个例外,但我不知道它来自哪里

这是我的密码

主要活动。爪哇:

package com.application.phoste.homecontrol;

import 安卓.app.Activity;
import 安卓.os.Bundle;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.EditText;
import 安卓.widget.Toast;


public class MainActivity extends Activity {
    private Paho paho = null;
    EditText topic = null;
    EditText message = null;
    Button connect = null;
    Button send = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        paho = new Paho();

        topic = (EditText) findViewById(R.id.topic);
        message = (EditText) findViewById(R.id.message);

        connect = (Button) findViewById(R.id.connect);
        connect.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                paho.connect();
                String res = (paho.isConnected()) ? "Connected" : "Not Connected";
                Toast toast = Toast.makeText(getApplicationContext(), res, Toast.LENGTH_SHORT);
                toast.show();
            }
        });
        send = (Button) findViewById(R.id.send);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                paho.publish(topic.getText().toString(), message.getText().toString());
                Toast toast = Toast.makeText(getApplicationContext(), "Message sent", Toast.LENGTH_SHORT);
                toast.show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

泛美卫生组织。爪哇:

package com.application.phoste.homecontrol;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;

public class Paho implements MqttCallback {

    private MqttClient client;
    private static final String BROKER = "tcp://192.168.1.189:1883";
    private static final int QOS = 2;

    public void connect() {
        try {
            client = new MqttClient(BROKER, MqttClient.generateClientId());
            MqttConnectOptions options = new MqttConnectOptions();
            options.setConnectionTimeout(1);
            client.setCallback(this);
            client.connect();
        } catch (MqttException e) {
            e.getMessage();
        }
    }

    public void disconnect() {
        if (client.isConnected()) {
            try {
                client.disconnect();
            } catch (MqttException e) {
                e.getMessage();
            }
        }
    }

    public boolean isConnected() {
        return client.isConnected();
    }

    public void publish(String topic, String m) {
        try {
            MqttMessage message = new MqttMessage(m.getBytes());
            message.setQos(2);
            client.publish(topic, message);
        } catch (MqttException e) {
            e.getMessage();
        }
    }

    @Override
    public void connectionLost(Throwable throwable) {

    }

    @Override
    public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {

    }

    @Override
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

    }
}

例外情况:

07-29 15:17:23.988  15718-15718/com.application.phoste.homecontrol E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.application.phoste.homecontrol, PID: 15718
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.eclipse.paho.client.mqttv3.MqttClient.isConnected()' on a null object reference
            at com.application.phoste.homecontrol.Paho.isConnected(Paho.java:44)
            at com.application.phoste.homecontrol.MainActivity$1.onClick(MainActivity.java:35)
            at 安卓.view.View.performClick(View.java:4756)
            at 安卓.view.View$PerformClick.run(View.java:19748)
            at 安卓.os.Handler.handleCallback(Handler.java:739)
            at 安卓.os.Handler.dispatchMessage(Handler.java:95)
            at 安卓.os.Looper.loop(Looper.java:135)
            at 安卓.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
            at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:693)

我还将<uses-permission 安卓:name="安卓.permission.internet"/>行添加到AndroidManifest中。xml

我错在哪里

编辑:

我刚刚意识到,在抛出异常之前,我就收到了一些警告信息。。。这是:

07-29 17:26:52.673  32706-32706/com.application.phoste.homecontrol W/System.err﹕ MqttException (0)
07-29 17:26:52.673  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence.open(MqttDefaultFilePersistence.java:80)
07-29 17:26:52.673  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:286)
07-29 17:26:52.674  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:167)
07-29 17:26:52.674  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at org.eclipse.paho.client.mqttv3.MqttClient.<init>(MqttClient.java:224)
07-29 17:26:52.674  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at org.eclipse.paho.client.mqttv3.MqttClient.<init>(MqttClient.java:136)
07-29 17:26:52.675  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at com.application.phoste.homecontrol.MainActivity.onCreate(MainActivity.java:35)
07-29 17:26:52.675  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at 安卓.app.Activity.performCreate(Activity.java:5933)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2282)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at 安卓.app.ActivityThread.access$900(ActivityThread.java:147)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at 安卓.os.Handler.dispatchMessage(Handler.java:102)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at 安卓.os.Looper.loop(Looper.java:135)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at 安卓.app.ActivityThread.main(ActivityThread.java:5254)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
07-29 17:26:52.676  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
07-29 17:26:52.678  32706-32706/com.application.phoste.homecontrol W/System.err﹕ at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:693)

我真的希望有人能帮我

我还更改了代码,以完成Main活动中的所有操作:

package com.application.phoste.homecontrol;

import 安卓.app.Activity;
import 安卓.os.Bundle;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.EditText;
import 安卓.widget.Toast;

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;


public class MainActivity extends Activity {
    EditText topic = null;
    EditText message = null;
    Button send = null;
    Button debug = null;
    MqttClient client;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try {
            client = new MqttClient("tcp://m2m.eclipse.org:1883", MqttClient.generateClientId());
            MqttConnectOptions options = new MqttConnectOptions();
            options.setConnectionTimeout(1);
            client.connect();
        } catch (MqttException e) {
            e.printStackTrace();
        }

        topic = (EditText) findViewById(R.id.topic);
        message = (EditText) findViewById(R.id.message);

        send = (Button) findViewById(R.id.send);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    MqttMessage m = new MqttMessage(message.getText().toString().getBytes());
                    m.setQos(2);
                    client.publish(topic.getText().toString(), m);
                    Toast toast = Toast.makeText(getApplicationContext(), "Message sent", Toast.LENGTH_SHORT);
                    toast.show();
                } catch (MqttException e) {
                    e.printStackTrace();
                }
            }
        });

        debug = (Button) findViewById(R.id.debug);
        debug.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String res = (client == null) ? "Null" : "Not Null";
                Toast toast = Toast.makeText(getApplicationContext(), res, Toast.LENGTH_SHORT);
                toast.show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

但它仍然不起作用,我从de debug按钮获得空Toast


共 (0) 个答案