使用KSOAP给予例外AsyncTask的Web服务 [英] Asynctask for web service using ksoap giving exceptions

查看:180
本文介绍了使用KSOAP给予例外AsyncTask的Web服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用的AsyncTask运行到Android code。但它是导致许多例外。我不能够删除这些例外。该应用程序意外停止。

有人能帮助我吗?

这是我的Andr​​oid code:

 包com。示例;
     进口java.net.SocketException异常;
     进口org.ksoap2.SoapEnvelope;
     进口org.ksoap2.serialization.SoapObject;
     进口org.ksoap2.serialization.SoapPrimitive;
     进口org.ksoap2.serialization.SoapSerializationEnvelope;
     进口org.ksoap2.transport.HttpTransportSE;
     进口android.app.Activity;
     进口android.app.ProgressDialog;
     进口android.os.AsyncTask;
     进口android.os.Bundle;
     进口android.util.Log;
     进口android.view.View;
     进口android.view.View.OnClickListener;
     进口android.widget.Button;
     进口android.widget.EditText;   公共类TeacherLoginActivity扩展活动
    {
    私人最终字符串NAMESPACE =htt​​p://tempuri.org/;
    私人最终字符串URL =htt​​p://10.0.2.2/loginteacher/Service1.asmx;    串t_id;
    字符串密码;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState)
    {
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.main);
            按钮登入=(按钮)findViewById(R.id.regsubmitbtn);            signin.setOnClickListener(新OnClickListener(){
                    公共无效的onClick(视图v){
                            的EditText etxt_user =(EditText上)findViewById(R.id.usereditlog);
                            。t_id = etxt_user.getText()的toString();
                            的EditText etxt_password =(EditText上)findViewById(R.id.pwdeditlog);
                            。密码= etxt_password.getText()的toString();
                            新LoginTask()执行();                    }
            });
        }    私人字符串doLogin(字符串t_id,字符串密码){       字符串资源= NULL;
       最后弦乐SOAP_ACTION =htt​​p://tempuri.org/GetLogin;
       最后弦乐METHOD_NAME =GetLogin;
       SoapObject要求=新SoapObject空间(namespace,METHOD_NAME);       request.addProperty(teacherid,t_id);
       request.addProperty(密码,密码);
       SoapSerializationEnvelope信封=新SoapSerializationEnvelope(SoapEnvelope.VER11);
       envelope.dotNet = TRUE; //这个变量设置为true
                                                               //什么似乎是兼容性
                                                               //为.Net的服务默认编码。
       envelope.setOutputSoapObject(请求);       的System.out.println(请求);       HttpTransportSE androidHttpTransport =新HttpTransportSE(URL);
       尝试{
              androidHttpTransport.call(SOAP_ACTION,信封);
              SoapPrimitive响应=(SoapPrimitive)envelope.getResponse();
              Log.i(对myApp,response.toString());
              的System.out.println(回应+响应);
              RES = response.toString();
              的System.out.println(RES);
       }赶上(SocketException前)
       {
           Log.e(错误,上soapPrimitiveData错误()+ ex.getMessage());
           ex.printStackTrace();
       }
       赶上(例外五){
           Log.e(错误,上soapPrimitiveData错误()+ e.getMessage());
               e.printStackTrace();
       }       返回水库;       }
    私有类LoginTask扩展的AsyncTask<太虚,太虚,太虚> {        私人最终ProgressDialog对话框=新ProgressDialog(
                TeacherLoginActivity.this);        在preExecute保护无效(){                this.dialog.setMessage(登录...);
                this.dialog.show();        }
        保护无效doInBackground(最终虚空......未使用){            字符串AUTH = doLogin(t_id,密码);
            的System.out.println(AUTH);            返回null; //不与UI交互!
        }
        保护无效onPostExecute(虚空结果)
        {                如果(this.dialog.isShowing()){
                this.dialog.dismiss();
                                             }         }      }       }我logcat的:   10-27 20:03:11.329:ERROR /错误:(493):上soapPrimitiveData错误()权限被拒绝
   10-27 20:14:31.458:ERROR /错误:(576):上soapPrimitiveData错误()权限被拒绝
   10-27 20:14:31.458:WARN / System.err的(576):java.net.SocketException异常:权限被拒绝
   10-27 20:14:31.498:WARN / System.err的(576):在org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocketImpl(本机方法)
   10-27 20:14:31.498:WARN / System.err的(576):在org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocket(OSNetworkSystem.java:186)
   10-27 20:14:31.498:WARN / System.err的(576):在org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:265)
   10-27 20:14:31.498:WARN / System.err的(576):在java.net.Socket.checkClosedAndCreate(Socket.java:873)
   10-27 20:14:31.498:WARN / System.err的(576):在java.net.Socket.connect(Socket.java:1020)
   10-27 20:14:31.498:WARN / System.err的(576):在org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:62)
   10-27 20:14:31.498:WARN / System.err的(576):在org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:88)    10-27 20:14:32.869:ERROR /窗口管理器(576):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
    10-27 20:14:32.869:ERROR /窗口管理器(576):在com.and roid.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    10-27 20:14:32.869:ERROR /窗口管理器(576):在dalvik.system.NativeStart.main(本机方法)
    10-27 20:14:34.188:信息/流程(576):发送信号。 PID:576 SIG:9


解决方案

您可能需要在XML文件中添加权限。

是这样的:

 &LT;使用许可权
        机器人:名字=android.permission.INTERNET对/&GT;

I am trying to run to Android code using an AsyncTask . However it is resulting in many exceptions. I am not able to remove these exceptions. The application stops unexpectedly.

Can someone help me ?

Here is my Android code :

     package com.example;
     import java.net.SocketException;
     import org.ksoap2.SoapEnvelope;
     import org.ksoap2.serialization.SoapObject;
     import org.ksoap2.serialization.SoapPrimitive;
     import org.ksoap2.serialization.SoapSerializationEnvelope; 
     import org.ksoap2.transport.HttpTransportSE;
     import android.app.Activity;
     import android.app.ProgressDialog;
     import android.os.AsyncTask;
     import android.os.Bundle; 
     import android.util.Log;
     import android.view.View;
     import android.view.View.OnClickListener;
     import android.widget.Button;
     import android.widget.EditText;

   public class TeacherLoginActivity extends Activity
    {
    private final String NAMESPACE = "http://tempuri.org/";
    private final String URL = "http://10.0.2.2/loginteacher/Service1.asmx";

    String t_id;
    String password;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Button signin = (Button) findViewById(R.id.regsubmitbtn);

            signin.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {


                            EditText etxt_user = (EditText) findViewById(R.id.usereditlog);
                            t_id = etxt_user.getText().toString();
                            EditText etxt_password = (EditText) findViewById(R.id.pwdeditlog);
                            password = etxt_password.getText().toString();


                            new LoginTask().execute();

                    }
            });   
        }

    private String doLogin(String t_id, String password) {

       String res=null;
       final String SOAP_ACTION = "http://tempuri.org/GetLogin";
       final String METHOD_NAME = "GetLogin";     
       SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

       request.addProperty("teacherid", t_id);
       request.addProperty("password",password);
       SoapSerializationEnvelope envelope = new    SoapSerializationEnvelope(SoapEnvelope.VER11);
       envelope.dotNet = true; // Set this variable to true for
                                                               // compatibility with what seems to be the
                                                               // default encoding for .Net-Services.
       envelope.setOutputSoapObject(request);

       System.out.println(request);

       HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);


       try {
              androidHttpTransport.call(SOAP_ACTION, envelope);
              SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
              Log.i("myApp", response.toString());
              System.out.println("response" +response);
              res=response.toString(); 
              System.out.println(res);


       }catch(SocketException ex)
       {
           Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage());
           ex.printStackTrace();
       }
       catch (Exception e) {
           Log.e("Error : " , "Error on soapPrimitiveData() " + e.getMessage());
               e.printStackTrace();
       }

       return res;

       }


    private class LoginTask extends AsyncTask<Void, Void, Void> {

        private final ProgressDialog dialog = new ProgressDialog(
                TeacherLoginActivity.this);

        protected void onPreExecute() {

                this.dialog.setMessage("Logging in...");
                this.dialog.show();

        }


        protected Void doInBackground(final Void... unused) {

            String auth=doLogin(t_id,password);
            System.out.println(auth);

            return null; // don't interact with the ui!
        }


        protected void onPostExecute(Void result) 
        {

                if (this.dialog.isShowing()) {
                this.dialog.dismiss();
                                             }  

         }

      }

       }

My logcat : 

   10-27 20:03:11.329: ERROR/Error :(493): Error on soapPrimitiveData()  Permission denied
   10-27 20:14:31.458: ERROR/Error :(576): Error on soapPrimitiveData() Permission denied
   10-27 20:14:31.458: WARN/System.err(576): java.net.SocketException: Permission denied
   10-27 20:14:31.498: WARN/System.err(576):     at       org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocketImpl(Native Method)
   10-27 20:14:31.498: WARN/System.err(576):     at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocket(OSNetworkSystem.java:186)
   10-27 20:14:31.498: WARN/System.err(576):     at  org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:265) 
   10-27 20:14:31.498: WARN/System.err(576):     at  java.net.Socket.checkClosedAndCreate(Socket.java:873)
   10-27 20:14:31.498: WARN/System.err(576):     at java.net.Socket.connect(Socket.java:1020)
   10-27 20:14:31.498: WARN/System.err(576):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:62)
   10-27 20:14:31.498: WARN/System.err(576):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:88)

    10-27 20:14:32.869: ERROR/WindowManager(576):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    10-27 20:14:32.869: ERROR/WindowManager(576):     at com.and roid.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    10-27 20:14:32.869: ERROR/WindowManager(576):     at dalvik.system.NativeStart.main(Native Method)
    10-27 20:14:34.188: INFO/Process(576): Sending signal. PID: 576 SIG: 9

解决方案

You probably need to add permissions in your XML file.

Something like:

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

这篇关于使用KSOAP给予例外AsyncTask的Web服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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