问题
I have written an android program to load values to tablerow from web service. But a value comes null so I need do convert it into string. Can some one 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)
回答1:
Use this,
try {
deleteuserDetails.setCreatedBy(result.getPropertyAsString(0).toString());
}
catch(Exception e) {
deleteuserDetails.setCreatedBy("null");
}
回答2:
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 wil change it to "null"
回答3:
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)));
回答4:
Try this:
deleteuserDetails.setCreatedBy(result.getPropertyAsString(0) == null ? "null": result.getPropertyAsString(0));
回答5:
Though its not a good practice, But You can concatenate the null value with "" to make it a String.
For 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:
You can simply check if its null then set a string for it.
if(result.getPropertyAsString(0) == null){
deleteuserDetails.setCreatedBy("NULL");
}else{
deleteuserDetails.setCreatedBy(result.getPropertyAsString(0));
}
回答8:
Instead of that, place the condition if(String!=null)
.
回答9:
"Hi this will be " + null;
Prints out "Hi this will be null" in String
回答10:
The error comes when you are trying to convert a null value to a String ( mostly it's BigDecimal)
So what you have to do is catch the exception when program tries to convert null to String and set the null value manually for the String variable.
try{
deleteuserDetails.setUserId(result.getPropertyAsString(4));
}catch (Exception e){
deleteuserDetails.setUserId(null);
}
回答11:
to Piggybag ride on what @prateek said.
String str=null;
System.out.println((str+""));
Do it without the.length so you can actually just print out the string
来源:https://stackoverflow.com/questions/13973233/convert-null-object-to-string