doinbackground 中的 java.lang.NullPointerException

标签 java android

enter image description here这是java中的代码,我进行了调试,它停止在apPhoto[i].id = Integer.parseInt(us.getPropertyAsString(0));处,getproperty返回null:

@Override
    protected ApartmentPhoto[] doInBackground(Void... arg0) {

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);
        PropertyInfo pi = new PropertyInfo();
        pi.setNamespace(NAMESPACE);
        pi.setName("email");
        pi.setValue(Global.Email);
        pi.setType(String.class);
        request.addProperty(pi);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);
        envelope.dotNet = true;
        try {
            HttpTransportSE androidHttpTransport = new HttpTransportSE(
                    Global.URL);
            androidHttpTransport.call(SOAP_ACTION1, envelope);

            SoapObject result11 = (SoapObject) envelope.getResponse();
            if (result11 == null)
                return null;
            else {
                ApartmentPhoto[] apPhoto = new ApartmentPhoto[result11.getPropertyCount()];
                for (int i = 0; i < apPhoto.length; i++) {
                    SoapObject us = (SoapObject) result11.getProperty(i);

                    apPhoto[i] = new ApartmentPhoto();
                     apPhoto[i].id = Integer.parseInt(us.getPropertyAsString(0));
                    apPhoto[i].image = us.getPropertyAsString(3);
                }
                return apPhoto;
            }
        } catch (Exception e) {

            e.printStackTrace();

            return null;

        }
    }
}


private class ApartmentPhoto {
    public String email1;
    public int id;
    public String image;
}

最佳答案

您的 SoapObject 可能不为 null,但您在 us.getPropertyAsString(0) 处指向的索引可能指向 null 值。请确保您的对象包含您认为它包含的属性。

您已经拥有以下代码:

for (int i = 0; i < apPhoto.length; i++) {
    SoapObject us = (SoapObject) result11.getProperty(i);

    apPhoto[i] = new ApartmentPhoto();
    apPhoto[i].id = Integer.parseInt(us.getPropertyAsString(0));
    apPhoto[i].image = us.getPropertyAsString(3);
}

只需在声明 us 后添加以下循环作为快速测试:

for(int j = 0; j < whateverYourCeilingIs; j++) {
    System.out.println(us.getPropertyAsString(j));
}

我想你会发现索引 0 为空。

关于doinbackground 中的 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28919062/

相关文章:

java - Netbeans 中桌面 libgdx 项目的 Jar 文件

java - 为什么java 8使用默认方法而不是扩展方法

java - Java 中的 printf() 功能与 CharBuffer 或类似的东西相结合

android - 获取微调器的名称值

java - Android - 动态设置绘图的渐变

java - 如何在 ListView 中显示??(使用okhttp库)

java - JTable 中鼠标单击引起的多个焦点事件

android - AlertDialog 不会在 ItemLongClickListener 上触发

android - AccountAuthenticatorActivity 上的 getSupportFragmentManager

java - 父类(super class)实例数组