I have written an android program to load values to table-row from web service. But value comes null so I need to convert it into a string. Can someone tell me the method to do it?
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);
}
Now deleteuserDetails.setCreatedBy(result.getPropertyAsString(0));
gets null value from webservice, so I need to convert it into string "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)
Instead of catching the exception or putting conditions, use
String.valueOf(result.getPropertyAsString(0));
It will call toString() method of the argument and will convert it to String and if result.getPropertyAsString(0) is null, then it will change it to "null".
result.getPropertyAsString(0)
alone will result in a NPE already when the property is internally null. Your stacktrace points to SoapObject.getPropertyAsString(SoapObject.java:165)
which should be
public String getPropertyAsString(int index) {
PropertyInfo propertyInfo = (PropertyInfo) properties.elementAt(index);
return propertyInfo.getValue().toString();
}
source - it will crash when propertyInfo
or
propertyInfo.getValue()
is null
.
To prevent that from happening you need to get the property not via getPropertyAsString
but via getProperty
and convert it manually to a String
.
You can encapsulate that into some utility method
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
}
and then do
deleteuserDetails.setUserId(getPropertyAsString(result, getPropertyAsString(4)));
deleteuserDetails.setUserName(getPropertyAsString(result, getPropertyAsString(2)));
deleteuserDetails.setUserRole(getPropertyAsString(result, getPropertyAsString(3)));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With