Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to serialize double value using kSOAP in Android

Here is the code;

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();
            }
     }
}

Please help me know how to serialize the double value using kSOAP.

like image 610
sushma Avatar asked Dec 21 '22 16:12

sushma


2 Answers

The data types of Double and Date need to be manually marshalled. There is a great article on See Sharp Gears that will help you with this. The link to marshalling a Double is: Implementing KSOAP Marshal Interface.

like image 104
cbuck12000 Avatar answered Jan 07 '23 18:01

cbuck12000


When trying to use MarshalDouble with kSOAP2 and API 19 in Android Studio, it appears that only MarshalFloat is recognized as an available class. If you run into this, just add this code into your project in it's own Java class called "MarshalDouble.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());
    }

}

You will then be able to register the envelope like this:

MarshalDouble md = new MarshalDouble();
md.register(envelope);

This could prove useful if you're getting latitude and longitude values from you web service and need to update a database with a valid double value.

like image 32
whyoz Avatar answered Jan 07 '23 18:01

whyoz