KSOAP 2通信 - 发送AsyncTask的结果UI线程和打印 [英] ksoap 2 communication - sending the asynctask result to UI thread and print

查看:320
本文介绍了KSOAP 2通信 - 发送AsyncTask的结果UI线程和打印的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想送于Android用户的登录凭据在通过Visual Studio我的本地主机上运行一个C#Web服务。我已经使用KSOAP2的SOAP通信,想送登录信息到Web服务,并在UI打印。我使用的AsyncTask做到这一点,但无法获得Web服务的信息,并将其打印到Android UI。

能否有人请帮助我在哪里出了错??​​???

 公共类MainActivity延伸活动{    联合国的EditText,PW;
    TextView的电视;
    按键测试;
    / **当第一次创建活动调用。 * /
    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        按钮测试=(按钮)findViewById(R.id.login);
        UN =(EditText上)findViewById(R.id.et_un);
        PW =(EditText上)findViewById(R.id.et_pw);
            test.setOnClickListener(新View.OnClickListener(){                @覆盖
                公共无效的onClick(视图v){
                    FileAsync fleasyn =新FileAsync(NULL);
                    fleasyn.execute();
                    }
                });
 }
}类FileAsync扩展的AsyncTask<字符串,字符串的char []> {
   公共FileAsync(字符串引号)
{
}
私人的char [] resultstring;
私人TextView的电视;@覆盖
保护无效onProgressUpdate(字符串...进度){
}保护无效onPostExecute(字符串使用){
    tv.setText(状态:+ resultstring);
                的System.out.println(resultstring);
}
@覆盖
受保护的char [] doInBackground(字符串... PARAMS){    最后弦乐NAMESPACE =htt​​p://sparking.org/login;
    最后弦乐METHOD_NAME =登录;
    最后弦乐SOAP_ACTION =htt​​p://sparking.org/login;
    最终字符串URL =HTTP://本地主机:63734 / service.asmx    SoapObject要求=新SoapObject空间(namespace,METHOD_NAME);    SoapSerializationEnvelope信封=新SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = TRUE;
    envelope.setOutputSoapObject(请求);
    HttpTransportSE运输=新HttpTransportSE(URL);
    尝试{
    transport.call(SOAP_ACTION,信封);
    SoapPrimitive resultstring =(SoapPrimitive)envelope.getResponse();}    赶上(例外五)
    {
        e.printStackTrace();
    }
    返回resultstring;}

错误信息:

  4月4日至30日:46:14.689:我/的System.out(2453):等待调试器来解决...
4月4日至30日:46:14.885:我/的System.out(2453):等待调试器来解决...
4月4日至30日:46:15.086:我/的System.out(2453):调试先后落户(1399)
4月4日至30日:49:00.905:W / System.err的(2453):产生java.net.SocketException:套接字失败:EACCES(权限被拒绝)
4月4日至30日:49:00.925:W / System.err的(2453):在libcore.io.IoBridge.socket(IoBridge.java:583)
4月4日至30日:49:00.935:W / System.err的(2453):在java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
4月4日至30日:49:00.945:W / System.err的(2453):在java.net.Socket.checkOpenAndCreate(Socket.java:663)
4月4日至30日:49:00.955:W / System.err的(2453):在java.net.Socket.connect(Socket.java:807)
4月4日至30日:49:00.975:W / System.err的(2453):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:76)
4月4日至30日:49:00.975:W / System.err的(2453):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:50)
4月4日至30日:49:01.035:W / System.err的(2453):在libcore.net.http.HttpConnection $ Address.connect(HttpConnection.java:340)
4月4日至30日:49:01.075:W / System.err的(2453):在libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
4月4日至30日:49:01.155:W / System.err的(2453):在libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
4月4日至30日:49:01.166:W / System.err的(2453):在libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
4月4日至30日:49:01.185:W / System.err的(2453):在libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
4月4日至30日:49:01.185:W / System.err的(2453):在libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
4月4日至30日:49:01.205:W / System.err的(2453):在libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
4月4日至30日:49:01.215:W / System.err的(2453):在libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
4月4日至30日:49:01.225:W / System.err的(2453):在org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:46)
4月4日至30日:49:01.245:W / System.err的(2453):在org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:68)
4月4日至30日:49:01.255:W / System.err的(2453):在com.example.cmpe220.FileAsync.doInBackground(MainActivity.java:171)
4月4日至30日:49:01.265:W / System.err的(2453):在com.example.cmpe220.FileAsync.doInBackground(MainActivity.java:1)
4月4日至30日:49:01.275:W / System.err的(2453):在android.os.AsyncTask $ 2.call(AsyncTask.java:287)
4月4日至30日:49:01.285:W / System.err的(2453):在java.util.concurrent.FutureTask.run(FutureTask.java:234)
4月4日至30日:49:01.305:W / System.err的(2453):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)
4月4日至30日:49:01.325:W / System.err的(2453):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
4月4日至30日:49:01.345:W / System.err的(2453):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
4月4日至30日:49:01.345:W / System.err的(2453):在java.lang.Thread.run(Thread.java:856)
4月4日至30日:49:01.365:W / System.err的(2453):libcore.io.ErrnoException:产生的原因插座失败:EACCES(权限被拒绝)
4月4日至30日:49:01.545:W / System.err的(2453):在libcore.io.Posix.socket(本机方法)
4月4日至30日:49:01.758:W / System.err的(2453):在libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181)
4月4日至30日:49:01.765:W / System.err的(2453):在libcore.io.IoBridge.socket(IoBridge.java:568)
4月4日至30日:49:01.777:W / System.err的(2453):23 ...更多
4月4日至30日:50:13.456:W / System.err的(2453):产生java.net.SocketException:套接字失败:EACCES(权限被拒绝)
4月4日至30日:50:13.465:W / System.err的(2453):在libcore.io.IoBridge.socket(IoBridge.java:583)
4月4日至30日:50:13.476:W / System.err的(2453):在java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
4月4日至30日:50:13.485:W / System.err的(2453):在java.net.Socket.checkOpenAndCreate(Socket.java:663)
4月4日至30日:50:13.496:W / System.err的(2453):在java.net.Socket.connect(Socket.java:807)
4月4日至30日:50:13.505:W / System.err的(2453):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:76)
4月4日至30日:50:13.517:W / System.err的(2453):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:50)
4月4日至30日:50:13.525:W / System.err的(2453):在libcore.net.http.HttpConnection $ Address.connect(HttpConnection.java:340)
4月4日至30日:50:13.545:W / System.err的(2453):在libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
4月4日至30日:50:13.555:W / System.err的(2453):在libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
4月4日至30日:50:13.575:W / System.err的(2453):在libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
4月4日至30日:50:13.585:W / System.err的(2453):在libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
4月4日至30日:50:13.605:W / System.err的(2453):在libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
4月4日至30日:50:13.615:W / System.err的(2453):在libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
4月4日至30日:50:13.625:W / System.err的(2453):在libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
4月4日至30日:50:13.635:W / System.err的(2453):在org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:46)
4月4日至30日:50:13.655:W / System.err的(2453):在org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:68)
4月4日至30日:50:13.665:W / System.err的(2453):在com.example.cmpe220.FileAsync.doInBackground(MainActivity.java:171)
4月4日至30日:50:13.685:W / System.err的(2453):在com.example.cmpe220.FileAsync.doInBackground(MainActivity.java:1)
4月4日至30日:50:13.715:W / System.err的(2453):在android.os.AsyncTask $ 2.call(AsyncTask.java:287)
4月4日至30日:50:13.776:W / System.err的(2453):在java.util.concurrent.FutureTask.run(FutureTask.java:234)
4月4日至30日:50:13.845:W / System.err的(2453):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)
4月4日至30日:50:13.855:W / System.err的(2453):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
4月4日至30日:50:13.875:W / System.err的(2453):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
4月4日至30日:50:13.875:W / System.err的(2453):在java.lang.Thread.run(Thread.java:856)
4月4日至30日:50:13.885:W / System.err的(2453):libcore.io.ErrnoException:产生的原因插座失败:EACCES(权限被拒绝)
4月4日至30日:50:13.915:W / System.err的(2453):在libcore.io.Posix.socket(本机方法)
4月4日至30日:50:13.925:W / System.err的(2453):在libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181)
4月4日至30日:50:13.945:W / System.err的(2453):在libcore.io.IoBridge.socket(IoBridge.java:568)
4月4日至30日:50:13.965:W / System.err的(2453):23 ...更多


解决方案

首先,您必须指定这些变量:

 `最后弦乐NAMESPACE =htt​​p://xyz.org/;`
`最后弦乐METHOD_NAME =;`
`最后弦乐SOAP_ACTION =;`
`最后字符串的URL =HTTP://本地主机:63734 / mywbservice.asmx**强大的文本**`

METHOD_NAME和SOAP_ACTION不能为空。下面是值,您需要为项目:

 < SOAP_ACTION =htt​​p://spartansparking.org/login;>
< METHOD_NAME =登录;>
< NAMESPACE =htt​​p://spartansparking.org/;>
< URL =HTTP://本地主机:63734 / parkingservice.asmx;>

要调用WebService的.NET,你不需要实际使用AsyncTask的。您可以使用用户主线程。

I am trying to send the login credentials from android user to a C# web service running in my local host through visual studio. I have used KSOAP2 for the SOAP communication and wanted to send the login info to the web service and print it in the UI. I am using AsyncTask to do it but was unable to get the information from the web service and print it to android UI.

Can some one please help where I went wrong ?????

public class MainActivity extends Activity {

    EditText un,pw;
    TextView tv;
    Button test;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button test=(Button) findViewById(R.id.login);
        un = (EditText) findViewById(R.id.et_un);
        pw = (EditText) findViewById(R.id.et_pw);


            test.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v) {
                    FileAsync fleasyn= new FileAsync(null);
                    fleasyn.execute();
                    } 
                }); 
 }
}



class FileAsync extends AsyncTask<String, String, char[]> {
   public FileAsync(String quotes) 
{


}


private char[] resultstring;
private TextView tv;

@Override
protected void onProgressUpdate(String... progress) {


}

protected void onPostExecute(String unused) {
    tv.setText("Status:"+resultstring);
                System.out.println(resultstring);
}


@Override
protected char[] doInBackground(String... params) {

    final String NAMESPACE = "http://sparking.org/login";
    final String METHOD_NAME = "login";
    final String SOAP_ACTION = "http://sparking.org/login";
    final String URL = "http://localhost:63734/service.asmx";

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE transport = new HttpTransportSE(URL);
    try {
    transport.call(SOAP_ACTION, envelope);
    SoapPrimitive resultstring = (SoapPrimitive)envelope.getResponse();

}

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

}

ERROR MESSAGES:

04-30 04:46:14.689: I/System.out(2453): waiting for debugger to settle...
04-30 04:46:14.885: I/System.out(2453): waiting for debugger to settle...
04-30 04:46:15.086: I/System.out(2453): debugger has settled (1399)
04-30 04:49:00.905: W/System.err(2453): java.net.SocketException: socket failed: EACCES (Permission denied)
04-30 04:49:00.925: W/System.err(2453):     at libcore.io.IoBridge.socket(IoBridge.java:583)
04-30 04:49:00.935: W/System.err(2453):     at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
04-30 04:49:00.945: W/System.err(2453):     at java.net.Socket.checkOpenAndCreate(Socket.java:663)
04-30 04:49:00.955: W/System.err(2453):     at java.net.Socket.connect(Socket.java:807)
04-30 04:49:00.975: W/System.err(2453):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76)
04-30 04:49:00.975: W/System.err(2453):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
04-30 04:49:01.035: W/System.err(2453):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
04-30 04:49:01.075: W/System.err(2453):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
04-30 04:49:01.155: W/System.err(2453):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
04-30 04:49:01.166: W/System.err(2453):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
04-30 04:49:01.185: W/System.err(2453):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
04-30 04:49:01.185: W/System.err(2453):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
04-30 04:49:01.205: W/System.err(2453):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
04-30 04:49:01.215: W/System.err(2453):     at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
04-30 04:49:01.225: W/System.err(2453):     at org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:46)
04-30 04:49:01.245: W/System.err(2453):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:68)
04-30 04:49:01.255: W/System.err(2453):     at com.example.cmpe220.FileAsync.doInBackground(MainActivity.java:171)
04-30 04:49:01.265: W/System.err(2453):     at com.example.cmpe220.FileAsync.doInBackground(MainActivity.java:1)
04-30 04:49:01.275: W/System.err(2453):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-30 04:49:01.285: W/System.err(2453):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-30 04:49:01.305: W/System.err(2453):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-30 04:49:01.325: W/System.err(2453):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-30 04:49:01.345: W/System.err(2453):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-30 04:49:01.345: W/System.err(2453):     at java.lang.Thread.run(Thread.java:856)
04-30 04:49:01.365: W/System.err(2453): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied)
04-30 04:49:01.545: W/System.err(2453):     at libcore.io.Posix.socket(Native Method)
04-30 04:49:01.758: W/System.err(2453):     at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181)
04-30 04:49:01.765: W/System.err(2453):     at libcore.io.IoBridge.socket(IoBridge.java:568)
04-30 04:49:01.777: W/System.err(2453):     ... 23 more
04-30 04:50:13.456: W/System.err(2453): java.net.SocketException: socket failed: EACCES (Permission denied)
04-30 04:50:13.465: W/System.err(2453):     at libcore.io.IoBridge.socket(IoBridge.java:583)
04-30 04:50:13.476: W/System.err(2453):     at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
04-30 04:50:13.485: W/System.err(2453):     at java.net.Socket.checkOpenAndCreate(Socket.java:663)
04-30 04:50:13.496: W/System.err(2453):     at java.net.Socket.connect(Socket.java:807)
04-30 04:50:13.505: W/System.err(2453):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76)
04-30 04:50:13.517: W/System.err(2453):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
04-30 04:50:13.525: W/System.err(2453):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
04-30 04:50:13.545: W/System.err(2453):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
04-30 04:50:13.555: W/System.err(2453):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
04-30 04:50:13.575: W/System.err(2453):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
04-30 04:50:13.585: W/System.err(2453):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
04-30 04:50:13.605: W/System.err(2453):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
04-30 04:50:13.615: W/System.err(2453):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
04-30 04:50:13.625: W/System.err(2453):     at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
04-30 04:50:13.635: W/System.err(2453):     at org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:46)
04-30 04:50:13.655: W/System.err(2453):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:68)
04-30 04:50:13.665: W/System.err(2453):     at com.example.cmpe220.FileAsync.doInBackground(MainActivity.java:171)
04-30 04:50:13.685: W/System.err(2453):     at com.example.cmpe220.FileAsync.doInBackground(MainActivity.java:1)
04-30 04:50:13.715: W/System.err(2453):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-30 04:50:13.776: W/System.err(2453):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-30 04:50:13.845: W/System.err(2453):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-30 04:50:13.855: W/System.err(2453):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-30 04:50:13.875: W/System.err(2453):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-30 04:50:13.875: W/System.err(2453):     at java.lang.Thread.run(Thread.java:856)
04-30 04:50:13.885: W/System.err(2453): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied)
04-30 04:50:13.915: W/System.err(2453):     at libcore.io.Posix.socket(Native Method)
04-30 04:50:13.925: W/System.err(2453):     at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181)
04-30 04:50:13.945: W/System.err(2453):     at libcore.io.IoBridge.socket(IoBridge.java:568)
04-30 04:50:13.965: W/System.err(2453):     ... 23 more

解决方案

First of all, You need to have these variables assigned:

`final String NAMESPACE = "http://xyz.org/";`
`final String METHOD_NAME="";`
`final String SOAP_ACTION="";`
`final String URL = "http://localhost:63734/mywbservice.asmx";**strong text**`

METHOD_NAME and SOAP_ACTION cannot be empty. Here are the values you need to have for the project:

<SOAP_ACTION="http://spartansparking.org/login";>
<METHOD_NAME="login";>
<NAMESPACE="http://spartansparking.org/";>
<URL = "http://localhost:63734/parkingservice.asmx";>

To call a WebService .NET, you dont need to use AsyncTask actually. You can use the user main thread.

这篇关于KSOAP 2通信 - 发送AsyncTask的结果UI线程和打印的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆