Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
444 views
in Technique[技术] by (71.8m points)

performance - To use the tutorial in android 4.0.3 if had to work with AsynxTasc but i still dont work?

I used this tutorial and did some changes that it should work for android 4.0.3.

But it still doesn't.

Can someone post me a correct solution?

package com.webservice;
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.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class FirstScreen extends Activity

{
/** Called when the activity is first created. */

private static String SOAP_ACTION1 = "http://tempuri.org/FahrenheitToCelsius";
private static String SOAP_ACTION2 = "http://tempuri.org/CelsiusToFahrenheit";
private static String NAMESPACE = "http://tempuri.org/";
private static String METHOD_NAME1 = "FahrenheitToCelsius";
private static String METHOD_NAME2 = "CelsiusToFahrenheit";
private static String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";
Button btnFar,btnCel,btnClear;
EditText txtFar,txtCel;

@Override
public void onCreate(Bundle savedInstanceState)

{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first_screen); 
        btnFar = (Button)findViewById(R.id.btnFar);
        btnCel = (Button)findViewById(R.id.btnCel);
        btnClear = (Button)findViewById(R.id.btnClear);
        txtFar = (EditText)findViewById(R.id.txtFar);
        txtCel = (EditText)findViewById(R.id.txtCel);
        
        btnFar.setOnClickListener(new View.OnClickListener()
        {
                 @Override
                  public void onClick(View v)
                  {
                      new one1().execute();
                  }
            });            
        btnCel.setOnClickListener(new View.OnClickListener()
        {
                  @Override
                  public void onClick(View v)
                  {
                      new one2().execute();
                  }
            });
        
        btnClear.setOnClickListener(new View.OnClickListener()
        {
                  @Override
                  public void onClick(View v)
                  {
                        txtCel.setText("");
                        txtFar.setText("");
                  }
            });     
 }
    
private class one1 extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
           //Initialize soap request + add parameters
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);    
      
        //Use this to add parameters
        request.addProperty("Fahrenheit",txtFar.getText().toString());         

        //Declare the version of the SOAP request
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);          

        envelope.setOutputSoapObject(request);
        envelope.dotNet = true;         

        try {
              HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);                

              //this is the actual part that will call the webservice
              androidHttpTransport.call(SOAP_ACTION1, envelope);
             
              // Get the SoapResult from the envelope body.
              SoapObject result = (SoapObject)envelope.bodyIn;
              if(result != null)
              {
                    //Get the first property and change the label text
                    txtCel.setText(result.getProperty(0).toString());
              }
              else
              {
                    Toast.makeText(getApplicationContext(), "No Response",Toast.LENGTH_LONG).show();
              }
        } catch (Exception e) {

              e.printStackTrace();

        }           
        return null;
    }
    
}

private class one2 extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        //Initialize soap request + add parameters
  SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME2);     

  //Use this to add parameters
  request.addProperty("Celsius",txtCel.getText().toString());     

  //Declare the version of the SOAP request
  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);    

  envelope.setOutputSoapObject(request);
  envelope.dotNet = true;   

  try {
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);          

        //this is the actual part that will call the webservice
        androidHttpTransport.call(SOAP_ACTION2, envelope);          

        // Get the SoapResult from the envelope body.            
        SoapObject result = (SoapObject)envelope.bodyIn;            
        if(result != null)
        {
              //Get the first property and change the label text
              txtFar.setText(result.getProperty(0).toString());

        }
        else
        {

              Toast.makeText(getApplicationContext(), "No Response",Toast.LENGTH_LONG).show();

        }
  } catch (Exception e) {
        e.printStackTrace();
  }         return null;
    }
    
}
}

Errorlog and Code

private class one1 extends AsyncTask<String, Integer, SoapObject> {

protected SoapObject doInBackground(String... arg0) {

protected **void** onPreExecute(**)**
 {
     //value from textview/edittext
 }

// TODO Auto-generated method stub
   //Initialize soap request + add parameters
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);    

//Use this to add parameters
request.addProperty("Fahrenheit","30");// provide value here        

//Declare the version of the SOAP request
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);          

envelope.setOutputSoapObject(request);
envelope.dotNet = true;         

try {
      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);                
      androidHttpTransport.call(SOAP_ACTION1, envelope);
      **result** = (SoapObject)envelope.bodyIn;

} catch (Exception e) {

      e.printStackTrace();

}           
return **result**;
   }

   protected void onPostExecute(SoapObject result)
   {
if(result != null)
{
  System.out.println(result.getProperty(0).toString());
}
else
{
  Toast.makeText(getApplicationContext(), "No Response",Toast.LENGTH_LONG).show();
}
}

}
}

I'm getting the following syntax error:

Syntax error, insert "enum Identifier" to complete EnumHeader Syntax error on token "void", @ expected result cannot be resolved to a variable FirstScreen.java result cannot be resolved to a variable FirstScreen.java

Edited Code :

package com.webservice;

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.app.ProgressDialog;
import android.view.View;
import android.view.View.OnClickListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;



public class FirstScreen extends Activity
{


     private static String SOAP_ACTION1 = "http://tempuri.org/FahrenheitToCelsius";
     private static String NAMESPACE = "http://tempuri.org/";
     private static String METHOD_NAME1 = "FahrenheitToCelsius";
     private static String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";
     SoapObject result;
     Button b;
     EditText et;
     int value;
     TextView tv;
     ProgressDialog pd;

     @Override
      public void onCreate(Bundle savedInstanceState)
      {

        super.onCreate(savedInstanceState);
        pd= new ProgressDialog(this);
        pd.setTitle("Making Soap Request");
        setContentView(R.layout.activity_first_screen); 
        b= (Button) findViewById(R.id.button1);
        tv= (TextView) findViewById(R.id.textView2);
        et= (EditText) findViewById(R.id.ed);           
                b.setOnClickListener(new OnClickListener()
                {

               @Override
               public void onClick(View v) {
               // TODO Auto-generated method stub
                value=Integer.parseInt(et.getText().toString());
                new one1().execute();
        }
    });


    }

     private class one1 extends AsyncTask<String, Integer, SoapObject> {

      protected void onPreExecute()
      {
          pd.show();
      }
    protected SoapObject doInBackground(String... arg0) {
        // TODO Auto-generated method stub
           //Initialize soap request + add parameters
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);    

        //Use this to add parameters
        request.addProperty("Fahrenheit",value);         

        //Declare the version of the SOAP request
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);          

        envelope.setOutputSoapObject(request);
        envelope.dotNet = true;         

        try {
              HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);                
              androidHttpTransport.call(SOAP_ACTION1, envelope);
              result = (SoapObject)envelope.bodyIn;

        } catch (Exception e) {

              e.printStackTrace();

        }           
        return result;
    }

     protected void onPostExecute(SoapObject result)
     {
      pd.dismiss();
    if(result != null)
    {
          tv.setText("Result = "+result.getProperty(0).toString());
    }
    else
    {
          Toast.makeText(getApplicationContext(), "No       Response",Toast.LENGTH_LONG).show();
    }
    }

    }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You can not access any UI elements in th DoInBackground() method, as it runs on its own thread, not on the UI thread. You should use

txtFar.setText(result.getProperty(0).toString());

and

Toast.makeText(getApplicationContext(), "No Response",Toast.LENGTH_LONG).show();

call in the onPostExecute, or in onProgressChanged() methods.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...