Подтвердить что ты не робот

Преобразование нулевого объекта в String

Я написал программу андроида для загрузки значений в tablerow из веб-службы. Но значение имеет значение null, поэтому мне нужно преобразовать его в строку. Может кто-нибудь скажет мне, как это сделать.

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);
    }

Теперь deleteuserDetails.setCreatedBy(result.getPropertyAsString(0)); получает значение null из webservice, поэтому мне нужно преобразовать его в строку "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)
4b9b3361

Ответ 1

Используйте это,

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

Ответ 2

Вместо того, чтобы ловить исключение или условия размещения, используйте String.valueOf(result.getPropertyAsString(0));

Он вызовет метод toString() аргумента и преобразует его в String, и если result.getPropertyAsString(0) равно null, тогда он изменит его на "null"

Ответ 3

result.getPropertyAsString(0) сам по себе приведет к NPE уже тогда, когда свойство будет внутренне нулевым. Ваш стек указывает на SoapObject.getPropertyAsString(SoapObject.java:165), который должен быть

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

источник - он сработает, когда propertyInfo или propertyInfo.getValue() - null.

Чтобы этого не произошло, вам нужно получить свойство не через getPropertyAsString, а через getProperty и преобразовать его вручную в String.

Вы можете инкапсулировать это в какой-то метод утилиты

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
}

а затем do

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

Ответ 4

Попробуйте следующее:

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

Ответ 5

Хотя это не очень хорошая практика, но вы можете объединить нулевое значение с помощью "", чтобы сделать его строкой.

Для ex:

    String str=null;
    System.out.println((str+"").length()); /// prints 4

Ответ 6

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

Ответ 7

Вы можете просто проверить, не установил ли его нуль строку для него.

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

Ответ 8

Вместо этого поместите условие if(String!=null).

Ответ 9

"Hi this will be " + null;

Распечатывает "Привет, это будет null" в String

Ответ 10

Ошибка возникает, когда вы пытаетесь преобразовать нулевое значение в строку (в основном это BigDecimal)

Поэтому вам нужно перехватить исключение, когда программа пытается преобразовать значение NULL в String, и вручную установить значение NULL для переменной String.

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

Ответ 11

к Piggybag ездить на том, что сказал @prateek.

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

Сделайте это без длины., так что вы можете просто распечатать строку