2011-03-31 48 views
3

以下是代碼;如何在Android中使用kSOAP序列化double值

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

請幫助我知道如何使用kSOAP序列化double值。

回答

5

Double和Date的數據類型需要手動編組。看到夏普齒輪有一篇很棒的文章可以幫助你解決這個問題。編組Double的鏈接是:Implementing KSOAP Marshal Interface

+0

您是否嘗試過使用帶有kSOAP2的MarshalDouble?該類似乎已經消失,並且在使用Android Studio時被MarshalFloat取代... – whyoz 2014-01-24 18:49:47

4

當試圖在Android Studio中使用帶有kSOAP2和API 19的MarshalDouble時,似乎只有MarshalFloat被識別爲可用類。如果遇到這種情況,只需將它添加到您自己的Java類「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()); 
    } 

} 

然後,您就可以註冊信封這樣的:

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

,如果你從你的網絡服務獲得的經緯度值。這可以證明是有用的,需要更新數據庫一個有效的double值。

相關問題