如何在Android中使用kSOAP序列化double值

sus*_*hma 3 serialization android

这是代码;

package com.SRS6;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class result extends Activity {


    private static final String SOAP_ACTION = "http://tempuri.org/insertquizdata";      
    private static final String METHOD_NAME = "insertquizdata";      
    private static final String NAMESPACE = "http://tempuri.org/";      
    private static final String URL = "http://192.168.1.203/studentresponse/Service.asmx";


    TextView txtcorrect;
    TextView txtwrong;
    TextView txttime;
    TextView txttotal;
    TextView txtunattempted,tv;
    ImageView resimg;
//  TextView txttimer;

    String n1;
    int n2;
    double n3;

    DataBaseHelper data;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);

        data=new DataBaseHelper(this);

        //resimg=(ImageView)findViewById(R.id.img);
        tv=(TextView)findViewById(R.id.tv);
        txttotal=(TextView)findViewById(R.id.ua);
        txttotal.setTextColor(Color.BLACK);
        txtunattempted=(TextView)findViewById(R.id.ua1);
        txtunattempted.setTextColor(Color.BLACK);
        txtcorrect=(TextView)findViewById(R.id.correct);
        txtcorrect.setTextColor(Color.BLACK); 
        txtwrong=(TextView)findViewById(R.id.wrong);
        txtwrong.setTextColor(Color.BLACK);
        txttime=(TextView)findViewById(R.id.time3);
        txttime.setTextColor(Color.BLACK);
      //  txttimer=(TextView)findViewById(R.id.time4);
      //  txttimer.setTextColor(Color.BLACK);

        Bundle bundle = getIntent().getExtras(); 
        String stuname=bundle.getString("stuname");
        System.out.println("Student name:"+stuname);
        int tesid=bundle.getInt("testid",0);
        System.out.println("Test id:"+tesid);
        int value = bundle.getInt("correctcount", 0);
        int value1 = bundle.getInt("wrongcount", 0);
        int value2=bundle.getInt("Ques",0);
        int value3=bundle.getInt("unatt",0);

        double perce=(value*100)/value2;
        System.out.println("Percentage:"+perce);

        String time2 = bundle.getString("time");
        //String time3 = bundle.getString("timer");


        txttotal.setText(" "+value2+" No of questions");
        txtunattempted.setText(" "+value3+" Unattempted");
        txtcorrect.setText(" "+value+" right answers");
        txtwrong.setText(" "+value1+" wrong answers");
        txttime.setText(" "+time2);
       // txttimer.setText(" "+time3);


        data.Insertfinalresult(stuname, tesid, perce);
        getfinalresult();
       // call();


}

    public void call()
     { 
         try {


                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);


                request.addProperty("strusername",n1);

                request.addProperty("inttestid",n2);

                request.addProperty("dblper",n3);


                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

                envelope.setOutputSoapObject(request);
                envelope.dotNet=true; 
                envelope.encodingStyle = SoapSerializationEnvelope.XSD;
                HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

                androidHttpTransport.call(SOAP_ACTION, envelope);
               Toast.makeText(result.this, "Data posted successfully",Toast.LENGTH_SHORT).show();

         } 
            catch (Exception e)    
            { 
            tv.setText(e.getMessage());
            }  
     }

     public void getfinalresult()
     {
         Cursor c1=data.selectfinalresult();
            while(c1.moveToNext())
            {
                n1=c1.getString(0);
                n2=c1.getInt(1);
                n3=c1.getDouble(2);
                System.out.println("First:"+n1); 
                System.out.println("Second:"+n2);
                System.out.println("Third:"+n3);
                call();
            }
     }
}
Run Code Online (Sandbox Code Playgroud)

请帮我知道如何使用kSOAP序列化double值.

cbu*_*000 5

需要手动编组Double和Date的数据类型.有一篇关于See Sharp Gears的文章可以帮助你解决这个问题.编组Double的链接是:实现KSOAP Marshal接口.


why*_*yoz 5

当尝试在 Android Studio 中使用带有 kSOAP2 和 API 19 的 MarshalDouble 时,似乎只有 MarshalFloat 被识别为可用类。如果您遇到这种情况,只需将此代码添加到您的项目中名为“MarshalDouble.java”的自己的 Java 类中。

import java.io.IOException;
import org.ksoap2.serialization.Marshal;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

public class MarshalDouble implements Marshal
{


public Object readInstance(XmlPullParser parser, String namespace, String name,
        PropertyInfo expected) throws IOException, XmlPullParserException {

    return Double.parseDouble(parser.nextText());
}


public void register(SoapSerializationEnvelope cm) {
     cm.addMapping(cm.xsd, "double", Double.class, this);

}


public void writeInstance(XmlSerializer writer, Object obj) throws IOException {
       writer.text(obj.toString());
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,您将能够像这样注册信封:

MarshalDouble md = new MarshalDouble();
md.register(envelope);
Run Code Online (Sandbox Code Playgroud)

如果您从 Web 服务获取纬度和经度值并且需要使用有效的双精度值更新数据库,这可能会很有用。