使用KSOAP给予例外AsyncTask的Web服务 [英] Asynctask for web service using ksoap giving exceptions
本文介绍了使用KSOAP给予例外AsyncTask的Web服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想使用的AsyncTask运行到Android code。但它是导致许多例外。我不能够删除这些例外。该应用程序意外停止。
有人能帮助我吗?
这是我的Android 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 =http://tempuri.org/;
私人最终字符串URL =http://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 =http://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屋!
查看全文