0

Ksoap2 试图连接到 Web 服务。但是,出现“读取超时”错误。我不知道该怎么办。

Ksoap2 '也有错误?错误在哪里

Ksoaps 库版本:3.0.1 模拟器 2.2

MainActivity.java

public class MainActivity extends Activity {

static final String METHOD_NAME = "GetTableUpdateVersionByTableName";
static final String NAMESPACE = "http://tempuri.org/";
static final String URL = "https://app.xxx.com/IntSecureFlight/SFInternal.svc";
static final String DOMAIN = "app.xxx.com";
static final String SOAP_ACTION = "http://tempuri.org/IOperationSvc/GetTableUpdateVersionByTableName";
TextView sonuc;
EditText tableName;
String message;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sonuc = (TextView) findViewById(R.id.textView1);
    tableName = (EditText) findViewById(R.id.editText1);
    Button btn = (Button) findViewById(R.id.button1);

    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Toast.makeText(getApplicationContext(), tableName.getText(),
                    Toast.LENGTH_LONG).show();

            new AsyncTaskClass().execute();

        }
    });

}

class AsyncTaskClass extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        // uzun islem oncesi yapilacaklar
    }

    @Override
    protected String doInBackground(String... strings) {

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty("tableName", tableName.getText().toString());
        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER12);

        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(request);
        soapEnvelope.headerOut = new Element[1];
        soapEnvelope.headerOut[0] = buildAuthHeader();
        try {
            HttpsTransportSE transportSE = new HttpsTransportSE(DOMAIN,
                    443, "/IntSecureFlight/SFInternal.svc", 2000);
            transportSE.call(SOAP_ACTION, soapEnvelope);

            Object result = soapEnvelope.getResponse();

            if (result instanceof SoapFault12) {
                SoapFault12 soapResult = (SoapFault12) result;
                message = soapResult.getLocalizedMessage();
            } else if (result instanceof SoapObject) {
                SoapObject soapResult = (SoapObject) result;
                message = soapResult.getProperty(0).toString();
            }
        } catch (SoapFault12 e) {
            message = e.getMessage();
        } catch (XmlPullParserException e) {
            message = e.getMessage();
        } catch (Exception e) {
            message = e.getMessage();
        }

        return message;

    }

    @Override
    protected void onPostExecute(String result) {
        sonuc.setText(message);
        super.onPostExecute(result);
    }
}

public Element buildAuthHeader() {
    Element h = new Element().createElement(NAMESPACE, "UsernameToken");
    Element username = new Element().createElement(NAMESPACE, "Username");
    username.addChild(Node.TEXT, "genel");
    h.addChild(Node.ELEMENT, username);
    Element pass = new Element().createElement(NAMESPACE, "KurumKod");
    pass.addChild(Node.TEXT, "050");
    h.addChild(Node.ELEMENT, pass);

    return h;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

HttpTransportSEImpl

public class HttpTransportSEImpl extends HttpTransportSE {



public HttpTransportSEImpl(String url) {
    super(url);
}

@Override
public ServiceConnection getServiceConnection() throws IOException {
    ServiceConnection connection = super.getServiceConnection();
    connection.setRequestProperty("Connection", "keep-alive");
    connection.setRequestProperty("Accept-Encoding", "gzip,deflate");
    return connection;
}

}

AndroidManifest添加 <uses-permission android:name="android.permission.INTERNET"/>

4

2 回答 2

0

读取超时错误和套接字超时错误将出现在互联网连接不足的情况下

  1. 检查您的互联网连接强度

  2. 或检查服务器响应字符串,您可能在读取时与数据类型不匹配。

并添加权限以监听network_state 和 access_fine_location

于 2013-10-22T07:57:37.117 回答
0

编辑您的代码:

HttpsTransportSE transportSE = new HttpsTransportSE(DOMAIN,
                    443, "/IntSecureFlight/SFInternal.svc", 60000);
于 2013-10-22T08:10:42.013 回答