web-dev-qa-db-fra.com

Convertir un objet nul en chaîne

J'ai écrit un programme Android pour charger des valeurs dans la table-ligne à partir du service Web. Mais la valeur est nulle, donc je dois la convertir en chaîne. Quelqu'un peut-il me dire la méthode pour le faire?

try{                    

    SoapObject request = service.getRequest();
    SoapSerializationEnvelope envelope = service.getEnvelope(request);
    SoapObject response = service.getResponse(envelope);
    Log.i("Service Master", response.toString());
    int count = response.getPropertyCount();
    for (int i = 0; i < count; i++) {
        SoapObject result = (SoapObject) response.getProperty(i);
        DeleteuserDetails deleteuserDetails=new DeleteuserDetails();
        deleteuserDetails.setUserId(result.getPropertyAsString(4));
        deleteuserDetails.setUserName(result.getPropertyAsString(2));
        deleteuserDetails.setUserRole(result.getPropertyAsString(3));
        deleteuserDetails.setCreatedDate(result.getPropertyAsString(1));
        deleteuserDetails.setCreatedBy(result.getPropertyAsString(0));
        userdetail.add(deleteuserDetails);
    }

Maintenant, deleteuserDetails.setCreatedBy(result.getPropertyAsString(0)); obtient une valeur nulle du webservice, j'ai donc besoin de la convertir en chaîne "null".

LogCat:

12-20 18:48:52.608: W/System.err(2174): Java.lang.NullPointerException
12-20 18:48:52.608: W/System.err(2174):     at org.ksoap2.serialization.SoapObject.getPropertyAsString(SoapObject.Java:165)
12-20 18:48:52.608: W/System.err(2174):     at com.mvss.admin.Deleteuser$deteUserIdLoad.doInBackground(Deleteuser.Java:81)
12-20 18:48:52.608: W/System.err(2174):     at com.mvss.admin.Deleteuser$deteUserIdLoad.doInBackground(Deleteuser.Java:1)
12-20 18:48:52.608: W/System.err(2174):     at Android.os.AsyncTask$2.call(AsyncTask.Java:185)
12-20 18:48:52.608: W/System.err(2174):     at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:305)
12-20 18:48:52.608: W/System.err(2174):     at Java.util.concurrent.FutureTask.run(FutureTask.Java:137)
12-20 18:48:52.608: W/System.err(2174):     at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1068)
12-20 18:48:52.608: W/System.err(2174):     at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:561)
12-20 18:48:52.608: W/System.err(2174):     at Java.lang.Thread.run(Thread.Java:1096)
13
Vivek Shankar

Utilisez ceci,

try {
    deleteuserDetails.setCreatedBy(result.getPropertyAsString(0).toString());
}
catch(Exception e) {
    deleteuserDetails.setCreatedBy("null");
}
6
Sahil Mahajan Mj

Au lieu d'attraper l'exception ou de mettre des conditions, utilisez String.valueOf(result.getPropertyAsString(0));

Il appellera la méthode toString () de l'argument et le convertira en String et si result.getPropertyAsString (0) est nul, alors il le changera en "null"

26
Prashant K

result.getPropertyAsString(0) seul entraînera déjà un NPE lorsque la propriété est nullement interne. Votre stacktrace pointe vers SoapObject.getPropertyAsString(SoapObject.Java:165) qui devrait être

public String getPropertyAsString(int index) {
    PropertyInfo propertyInfo = (PropertyInfo) properties.elementAt(index);
    return propertyInfo.getValue().toString();
}

source - il plantera lorsque propertyInfo ou propertyInfo.getValue() est null.

Pour éviter cela, vous devez obtenir la propriété non via getPropertyAsString mais via getProperty et la convertir manuellement en String.

Vous pouvez l'encapsuler dans une méthode utilitaire

public static String getPropertyAsString(SoapObject object, int index) {
    Object prop = object.getProperty(index);
    if(prop instanceof PropertyInfo) {
        prop = ((PropertyInfo)prop).getValue();
    }
    return String.valueOf(prop); // will make it "null" if it is null
}

puis faire

deleteuserDetails.setUserId(getPropertyAsString(result, getPropertyAsString(4)));
deleteuserDetails.setUserName(getPropertyAsString(result, getPropertyAsString(2)));
deleteuserDetails.setUserRole(getPropertyAsString(result, getPropertyAsString(3)));
8
zapl

Essaye ça:

deleteuserDetails.setCreatedBy(result.getPropertyAsString(0) == null ? "null": result.getPropertyAsString(0));
5
Igorry

Bien que ce ne soit pas une bonne pratique, vous pouvez toutefois concaténer la valeur nulle avec "" pour en faire une chaîne.

Par exemple:

    String str=null;
    System.out.println((str+"").length()); /// prints 4
5
Prateek
if(result.getPropertyAsString(0)==null)
{
deleteuserDetails.setCreatedBy("");
}
else
{
deleteuserDetails.setCreatedBy(result.getPropertyAsString(0).toString());
}
3
Kanaiya Katarmal

Vous pouvez simplement vérifier si son null puis définir une chaîne pour lui.

if(result.getPropertyAsString(0) == null){
 deleteuserDetails.setCreatedBy("NULL");
}else{
 deleteuserDetails.setCreatedBy(result.getPropertyAsString(0));
}
3
Abubakkar

Au lieu de cela, placez la condition if(String!=null).

2
Avadhani Y

"Hi this will be " + null;

Imprime "Salut, ce sera nul" dans la chaîne

2
HannahCarney

à Piggybag rouler sur ce que @prateek a dit.

 String str=null;
    System.out.println((str+""));

Faites-le sans la longueur pour pouvoir simplement imprimer la chaîne

0
krotsch

L'erreur survient lorsque vous essayez de convertir une valeur nulle en une chaîne (généralement c'est BigDecimal)

Donc, ce que vous devez faire est d'attraper l'exception lorsque le programme essaie de convertir null en String et de définir manuellement la valeur null pour la variable String.

try{
    deleteuserDetails.setUserId(result.getPropertyAsString(4));
}catch (Exception e){
    deleteuserDetails.setUserId(null);
}
0