Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [paho-dev] NPE thrown by MqttAndroidClient without any object set to null

Can anyone please help me understanding what's the issue?

Just to help the reader I include my complete code and the code where there is the actual call of a method on a null object in MqttAndroidClient.java (outlined in yellow)

Why mqttService is null?



------  MY CODE  --------


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import org.eclipse.paho.android.service.MqttAndroidClient;
import org.eclipse.paho.client.mqttv3.IMqttActionListener;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

public class MainActivity extends AppCompatActivity {

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

        String topic        = "MQTT Examples";
        String content      = "Message from MqttPublishSample";
        int qos             = 2;
        String broker       = "tcp://iot.eclipse.org:1883";
        String clientId     = "JavaSample";
        MemoryPersistence persistence = new MemoryPersistence();

        try {
            MqttAndroidClient sampleClient = new MqttAndroidClient(getApplicationContext(),broker,clientId);

            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setCleanSession(true);

            sampleClient.setCallback(new MqttCallback() {...} );

            sampleClient.connect(connOpts);

            MqttMessage message = new MqttMessage(content.getBytes());
            message.setQos(qos);

            sampleClient.publish(topic, message);

            System.exit(0);

        } catch(MqttException me) {

            me.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();
            throw new RuntimeException(e);

        }
    }
}

-------   MqttAndroidClient.java    ---------

@Override
public IMqttDeliveryToken publish(String topic, MqttMessage message,
      Object userContext, IMqttActionListener callback)
      throws MqttException, MqttPersistenceException {
   MqttDeliveryTokenAndroid token = new MqttDeliveryTokenAndroid(
         this, userContext, callback, message);
   String activityToken = storeToken(token);
   IMqttDeliveryToken internalToken = mqttService.publish(clientHandle,
         topic, message, null, activityToken);
   token.setDelegate(internalToken);
   return token;
}




Da: paho-dev-bounces@xxxxxxxxxxx <paho-dev-bounces@xxxxxxxxxxx> per conto di Sergio Torassa <sertorassa@xxxxxxxxxxx>
Inviato: mercoledì 17 maggio 2017 15.43
A: paho-dev@xxxxxxxxxxx
Oggetto: Re: [paho-dev] NPE thrown by MqttAndroidClient without any boject set to null
 

Does anyone know  what could be the reason of the NPE?


I also made another try using the same identical code but replacing MqttAndroidClient with MqttClient and everything works fine.

Debugging the code I found that the mqttService is null in MqttAndroidClient when the mqttService.publish(..) method is called.




Da: Sergio Torassa <sertorassa@xxxxxxxxxxx>
Inviato: sabato 6 maggio 2017 16.19
A: paho-dev@xxxxxxxxxxx
Oggetto: Re: [paho-dev] NPE thrown by MqttAndroidClient without any boject set to null
 

I tried creating a brand new project in AndroidStudio and the result is the same: NPE in the publish method


In the gradle.build config the versions of MQTT are:


serviceVersion = '1.1.1'
clientVersion = '1.1.0'


This is the excerpt for the connection, which works without catching any Exception


MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setCleanSession(false);

try {

    mqttAndroidClient.connect(mqttConnectOptions, null);

} catch (MqttException ex){
    ex.printStackTrace();
}





Da: Sergio Torassa <sertorassa@xxxxxxxxxxx>
Inviato: martedì 2 maggio 2017 11.28
A: paho-dev@xxxxxxxxxxx
Oggetto: Re: [paho-dev] NPE thrown by MqttAndroidClient without any boject set to null
 

Hi James,


this is the result in logcat of e.printStackTrace()


java.lang.NullPointerException
     at org.eclipse.paho.android.service.MqttAndroidClient.publish(MqttAndroidClient.java:812)
     at org.eclipse.paho.android.service.MqttAndroidClient.publish(MqttAndroidClient.java:668)
     at com.storassa.android.giulia.MainActivity.onCreate(MainActivity.java:54)
     at android.app.Activity.performCreate(Activity.java:5275)
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2166)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2252)
     at android.app.ActivityThread.access$800(ActivityThread.java:139)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
     at android.os.Handler.dispatchMessage(Handler.java:102)
     at android.os.Looper.loop(Looper.java:136)
     at android.app.ActivityThread.main(ActivityThread.java:5103)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:515)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)
     at dalvik.system.NativeStart.main(Native Method)


Just to add a piece of info, I connected the client with a simple call to MqttAndroidClient.connect().


Da: paho-dev-bounces@xxxxxxxxxxx <paho-dev-bounces@xxxxxxxxxxx> per conto di James Sutton1 <james.sutton@xxxxxxxxxx>
Inviato: martedì 2 maggio 2017 10.20
A: paho-dev@xxxxxxxxxxx
Oggetto: Re: [paho-dev] NPE thrown by MqttAndroidClient without any boject set to null
 
Hi Sergio, 
 
Could you provide the stack trace please, It might help with identifying the cause.
 
Kind regards,
 
James Sutton
Software Engineer - IoT Foundation - MQTT Open Source Projects
Ops Team - Wimbledon Project

Phone: 01962 815438 | Extension: x372454
E-mail: 
Personal Website: www.jsutton.co.uk
Find me on:     
IBM

Hursley Park
HursleySO212JN
United Kingdom
 
IBM United Kingdom Limited Registered in England and Wales with number 741598 Registered office: PO Box 41, North Harbour, Portsmouth, Hants. PO6 3AU
 
 
----- Original message -----
From: Sergio Torassa <sertorassa@xxxxxxxxxxx>
Sent by: paho-dev-bounces@xxxxxxxxxxx
To: General development discussions for paho project <paho-dev@xxxxxxxxxxx>, "ingeniero@xxxxxxxxxxxxxxxxxxx" <ingeniero@xxxxxxxxxxxxxxxxxxx>
Cc:
Subject: Re: [paho-dev] NPE thrown by MqttAndroidClient without any boject set to null
Date: Mon, May 1, 2017 7:40 PM
 

I forgot to mention that also topic is not null. It is a string

Il 01/mag/2017 20:01, Manuel Domínguez Dorado <manolodd@xxxxxxxxx> ha scritto:
>
> What about publishTopic?
>
> Perhaps this is null.
>
> 2017-05-01 19:26 GMT+02:00 Sergio Torassa <sertorassa@xxxxxxxxxxx>:
>>
>> Hello all
>>
>>
>> I'm trying to develop a very simple Android app based upon MQTT.
>>
>> Just from the beginning I started with an NPE thrown by MqttAndroidClient.publish(String topic, MqttMessage message) method.
>>
>>
>> This is the excerpt of the code where the NPE is thrown:
>>
>>
>> try {
>>     MqttMessage msg = new MqttMessage("test".getBytes());
>>     mqttAndroidClient.publish(publishTopic, msg);
>> } catch (Exception e) {
>>     throw new RuntimeException(e);
>> }
>>
>> I checked both mqttAndroidClient and msg and neither of them are null.
>>
>> From the MQTT documentation MqttAndroidClient.publish() method is not supposed to throw a NPE.
>>
>> What could be the reason for that?
>>
>>
>> Thanks
>>
>> Sergio
>>
>>
>> _______________________________________________
>> paho-dev mailing list
>> paho-dev@xxxxxxxxxxx
>> To change your delivery options, retrieve your password, or unsubscribe from this list, visit
>> https://dev.eclipse.org/mailman/listinfo/paho-dev
>
>
>
>
> --
> ---
> Manuel Domínguez Dorado
> Software engineer (Ph.D, M.Sc., B.Sc.)
> Certified Project Management Professional (PMP)
> ingeniero@xxxxxxxxxxxxxxxxxxx
> http://www.ManoloDominguez.com
> (+34) 607 418 760
>

_______________________________________________
paho-dev mailing list
paho-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/paho-dev
 
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU


Back to the top