16

Webサービスからテーブル行に値をロードするAndroidプログラムを作成しました。しかし、値は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));Webサービスからnull値を取得するようになったので、文字列に変換する必要があります"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)
4

11 に答える 11

30

例外をキャッチしたり条件を設定したりする代わりに、 String.valueOf(result.getPropertyAsString(0));

引数のtoString()メソッドを呼び出し、それをStringに変換し、result.getPropertyAsString(0)がnullの場合、「null」に変更します。

于 2015-01-08T06:10:12.430 に答える
8

これは良い習慣ではありませんが、null値を「」と連結して文字列にすることができます。

例えば:

String str=null;
System.out.println((str+"").length()); /// prints 4
于 2012-12-20T13:33:56.487 に答える
8

result.getPropertyAsString(0)プロパティが内部的にnullの場合、単独ではすでにNPEになります。あなたのスタックトレースSoapObject.getPropertyAsString(SoapObject.java:165)は、

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

propertyInfosource-または 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)));
于 2012-12-20T14:05:17.183 に答える
6

これを試して:

deleteuserDetails.setCreatedBy(result.getPropertyAsString(0) == null ? "null": result.getPropertyAsString(0));
于 2012-12-20T13:29:42.600 に答える
5

これを使って、

try {
    deleteuserDetails.setCreatedBy(result.getPropertyAsString(0).toString());
}
catch(Exception e) {
    deleteuserDetails.setCreatedBy("null");
}
于 2012-12-20T13:34:04.953 に答える
3
if(result.getPropertyAsString(0)==null)
{
deleteuserDetails.setCreatedBy("");
}
else
{
deleteuserDetails.setCreatedBy(result.getPropertyAsString(0).toString());
}
于 2012-12-20T13:29:31.697 に答える
3

nullかどうかを確認してから、文字列を設定するだけです。

if(result.getPropertyAsString(0) == null){
 deleteuserDetails.setCreatedBy("NULL");
}else{
 deleteuserDetails.setCreatedBy(result.getPropertyAsString(0));
}
于 2012-12-20T13:29:52.677 に答える
3

"Hi this will be " + null;

文字列に「こんにちは、これはnullになります」を出力します

于 2017-07-16T13:04:50.063 に答える
2

その代わりに、条件を設定しますif(String!=null)

于 2012-12-20T13:29:23.050 に答える
0

null値を文字列に変換しようとするとエラーが発生します(ほとんどの場合、BigDecimalです)。

したがって、プログラムがnullをStringに変換しようとしたときに例外をキャッチし、String変数にnull値を手動で設定する必要があります。

try{
    deleteuserDetails.setUserId(result.getPropertyAsString(4));
}catch (Exception e){
    deleteuserDetails.setUserId(null);
}
于 2019-10-09T08:03:00.447 に答える
0

@prateekが言ったことに乗ってピギーバッグに。

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

.lengthなしで実行すると、実際に文字列を印刷できます

于 2019-10-16T12:20:08.313 に答える