2013-09-19 2 views
1

Я занимаюсь анализом мыла в android. Это следующие шаги, которые я предпринимаю при анализе 1) Я загрузить ksoap2-android-assembly-2.4-jar-with-dependencies (1) .jar. 2) Затем я использовал это в этом коде. Но я получаю эту ошибку.java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive нельзя отнести к org.ksoap2.serialization.SoapObject

**java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObject** 

Вот мой код.

package com.example.networkconnectivity; 

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapPrimitive; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.AndroidHttpTransport; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
    private static final String SOAP_ACTION = "http://wsendpoints.bbrailapps.firstgroup.com/getVersion"; 
    private static final String METHOD_NAME = "getVersion"; 
    private static final String NAMESPACE = "http://wsendpoints.bbrailapps.firstgroup.com"; 
    private static final String URL = "http://railapps.firstgroup.com/FirstGroupRailApps/services/RailAppsCAWS?wsdl"; 
    private SoapObject resultRequestSOAP = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     System.out.println("=====================" + haveNetworkConnection()); 

     new AsyncTask<Void, Void, String>() { 
      ProgressDialog dialog = new ProgressDialog(MainActivity.this); 

      protected void onPreExecute() { 
       dialog.show(); 
      }; 

      protected String doInBackground(Void[] params) { 

       resultRequestSOAP = new SoapObject(NAMESPACE, METHOD_NAME); 

       SoapSerializationEnvelope envp = new SoapSerializationEnvelope(
         SoapEnvelope.VER11); 
       envp.dotNet = true; 
       envp.setOutputSoapObject(resultRequestSOAP); 
       AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(
         URL); 
       try { 
        androidHttpTransport.call(SOAP_ACTION, envp); 
        SoapPrimitive resultsString = (SoapPrimitive)envp.getResponse(); 
        return resultRequestSOAP.toString();  

       } catch (Exception e) { 
        Log.i("WS Error->", e.toString()); 
        return e.toString(); 
       } 


      }; 

      protected void onPostExecute(String result) { 
       dialog.dismiss(); 
       Toast.makeText(MainActivity.this, 
         "Check Network connectivety" + result, 
         Toast.LENGTH_LONG).show(); 
      }; 
     }.execute(); 

    } 

    public boolean haveNetworkConnection() { 
     boolean haveConnectedWifi = false; 
     boolean haveConnectedMobile = false; 

     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
     for (NetworkInfo ni : netInfo) { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
       if (ni.isConnected()) 
        haveConnectedWifi = true; 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       if (ni.isConnected()) 
        haveConnectedMobile = true; 
     } 
     return haveConnectedWifi || haveConnectedMobile; 
    } 

} 

ответ

1

Исключение составляет на:

resultRequestSOAP = (SoapObject) envp.getResponse(); 

Потому что вы не можете бросить в ответ получить форму SoapSerializationEnvelope в SoapObject

+0

так, как я могу удалить это исключение – user2648752

+0

Для получения дополнительной информации для проверки разбора ссылка: https://code.google.com/p/ksoap2-android/wiki/CodingTipsAndTricks#sending/receiving_array_of_complex_types_or_primitives –

+0

вы можете разобрать мой один метод с использованием любого парсера ..? – user2648752

0

Изменить это: SoapPrimitive resultsString = (SoapPrimitive) envp.getResponse ();

к

SoapObject resultsString = (SoapObject) envp.getResponse();

0
if your web method returns json response as json array then use 

SoapObject result= (SoapObject) envelop.getResponse(); 

if your web method returns json response as primitive data then use 

SoapPrimitive results = (SoapPrimitive)envelop.getResponse(); 

so for your code use 

SoapObject result= (SoapObject) envelop.getResponse(); 
Смежные вопросы