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

Я написал программу Android для загрузки значений в 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) 

Solutions Collecting From Web of "Преобразование нулевого объекта в String"

Использовать это,

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

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

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

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

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

Source – он сработает, когда 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 } 

И затем

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

Попробуй это:

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

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

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

Использование:

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

Вы также можете разделить это на две строки, выполнив:

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

Это сокращенное обозначение if else для:

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

Вы можете прочитать об этом здесь

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

Например:

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

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

"Hi this will be " + null;

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