twana eng
twana eng

Reputation: 31

Map<String, Object> is giving null

I have a POJO class in java and I am trying to fetch out the json using HashMap<> but I am getting null. I don't why? This is my my pojo class

public class NetworkConfiguration {

    @SerializedName("GUID")
    @Expose
    private String gUID;
    @SerializedName("Name")
    @Expose
    private String name;
    @SerializedName("Type")
    @Expose
    private String type;
    @SerializedName("WiFi")
    @Expose
    private WiFi wiFi;

    public NetworkConfiguration() {
    }
    public NetworkConfiguration(String gUID, String name, String type, WiFi wiFi) {
        super();
        this.gUID = gUID;
        this.name = name;
        this.type = type;
        this.wiFi = wiFi;
    }

    public String getGUID() {
        return gUID;
    }

    public void setGUID(String gUID) {
        this.gUID = gUID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public WiFi getWiFi() {
        return wiFi;
    }

    public void setWiFi(WiFi wiFi) {
        this.wiFi = wiFi;
    }

}

This is how I am generating the json

List<NetworkConfiguration> networkConfigurations=new ArrayList<>;
     WiFi wiFi=new WiFi();
                        wiFi.setPassphrase(open_network_configuration_wifi_password_edit.getText().toString());
                        wiFi.setSecurity(spinner_open_network_configuration_wifi_security.getSelectedItem().toString());
                        wiFi.setSSID(open_network_configuration_wifi_ssid_edit.getText().toString());
                        if(open_network_configuration_wifi_autoconnect_option.isChecked())
                        {
                            wiFi.setAutoConnect(true);
                        }
                        else
                            {
                                wiFi.setAutoConnect(false);
                            }
                        Map<String,Object> openNetworkConfigurationMap= new HashMap<>();

                        networkConfigurations.add(new NetworkConfiguration(open_network_configuration_guid_edit.getText().toString(),
                                open_network_configuration_name_edit.getText().toString(),"WiFi",wiFi));
                        openNetworkConfigurationMap.put("NetworkConfigurations", networkConfigurations);
                        System.out.println(new JSONObject(openNetworkConfigurationMap));
                        System.out.println(networkConfigurations.get(0).getWiFi().getAutoConnect());

Now I am printing the values added in networkConfigurations class and correct values are printing but when i print json then it gives me {"NetworkConfigurations":[null]}. Thank u in advance for help

Upvotes: 0

Views: 993

Answers (1)

Nandu Raj
Nandu Raj

Reputation: 2110

new JSONObject(map);

Caution: This will only work for a Map<String, String>!. Yours is Map so won't work.

Other functions you can get from its documentation http://stleary.github.io/JSON-java/index.html

Gson can also be used to serialize arbitrarily complex objects.

Here is how you use it:

Gson gson = new Gson(); 
String json = gson.toJson(myObject); 

Gson will automatically convert collections to JSON arrays. Gson can serialize private fields and automatically ignores transient fields.

Code:

List<NetworkConfiguration> networkConfigurations=new ArrayList<>;
WiFi wiFi=new WiFi();
wiFi.setPassphrase(open_network_configuration_wifi_password_edit.getText().toString());
wiFi.setSecurity(spinner_open_network_configuration_wifi_security.getSelectedItem().toString());
wiFi.setSSID(open_network_configuration_wifi_ssid_edit.getText().toString());
if(open_network_configuration_wifi_autoconnect_option.isChecked())
       {
         wiFi.setAutoConnect(true);
       }
else
       {
         wiFi.setAutoConnect(false);
       }
Map<String,Object> openNetworkConfigurationMap= new HashMap<>();

networkConfigurations.add(new NetworkConfiguration(open_network_configuration_guid_edit.getText().toString(),
                                open_network_configuration_name_edit.getText().toString(),"WiFi",wiFi));
openNetworkConfigurationMap.put("NetworkConfigurations", networkConfigurations);
Gson gson = new Gson();
String json = gson.toJson(openNetworkConfigurationMap);
System.out.println(json);
System.out.println(networkConfigurations.get(0).getWiFi().getAutoConnect());

Also, make sure Gson library is there in your build path. If maven, you can add following dependency to pom file

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

If you are using any other build package(since you haven't mentioned anywhere), do the appropriate step to bring GSON.

Upvotes: 3

Related Questions