2013-10-18 62 views
0

我在android中创建了loginform,它检查服务器上的身份验证,但它不会给我输出,我不知道发生了哪个错误!Android - 使用wsdl webservice使用kso​​ap2登录认证

我的Android活动代码:

public class MainActivity extends Activity { 
private final String NAMESPACE = "http://ws.webapp.org"; 
private final String URL = "http://192.168.0.2:8080/WebApp2/services/SearchData?wsdl"; 
private final String SOAP_ACTION = "http://ws.webapp.org/getSearchData"; 
private final String METHOD_NAME = "getSearchData"; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button login = (Button) findViewById(R.id.button1); 
    login.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      loginAction();    
     } 
    }); 
} 

private void loginAction(){ 
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    EditText userName = (EditText) findViewById(R.id.editText1); 
    String user_Name = userName.getText().toString(); 
    EditText userPassword = (EditText) findViewById(R.id.editText2); 
    String user_Password = userPassword.getText().toString(); 

    //Pass value for userName variable of the web service 
    PropertyInfo unameProp =new PropertyInfo(); 
    unameProp.setName("userName");//Define the variable name in the web service method 
    unameProp.setValue(user_Name);//set value for userName variable 
    unameProp.setType(String.class);//Define the type of the variable 
    request.addProperty(unameProp);//Pass properties to the variable 

    //Pass value for Password variable of the web service 
    PropertyInfo passwordProp =new PropertyInfo(); 
    passwordProp.setName("password"); 
    passwordProp.setValue(user_Password); 
    passwordProp.setType(String.class); 
    request.addProperty(passwordProp); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.setOutputSoapObject(request); 
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

    try{ 

     androidHttpTransport.call(SOAP_ACTION, envelope); 
     SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 

     TextView result = (TextView) findViewById(R.id.textView1); 
     result.setText(response.toString()); 

    } 
    catch(Exception e) 
    { 
     Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
     e.printStackTrace();   
    } 
    } 

的Android manifest.xml文件:我已经给的manifest.xml

请帮助许可.. !!

+0

决不在主线程一个HTTP调用。 –

+0

所以现在我可以用什么来代替HTTP调用? –

+0

使用异步任务来执行网络操作。 –

回答

2

永远不要在主线程中发出HTTP请求/网络调用,总是使用Asynctask在后台执行更长的操作,以便它不会暂停UI线程。

这个tutorial有一个非常好的教程和分步指南。

0

在这里,您不使用任何网络相关的动作的直接调用....

你第一次调用后台线程和呼叫网络相关的行动......。

请参阅下面的代码:

块引用

login.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View arg0) { 

     AddReviewAsyncTask call = new AddReviewAsyncTask(); 

     call.execute(); 

    } 
}); 




private class AddReviewAsyncTask extends AsyncTask<String, Void, Void> 
{ 

int responce; 
@Override 
protected Void doInBackground(String... params) { 
    // TODO Auto-generated method stub 

    loginAction(); 
    return null; 


} 

@Override 
protected void onPostExecute(Void result) { 
    // TODO Auto-generated method stub 
    super.onPostExecute(result); 
} 

@Override 
protected void onPreExecute() { 
    // TODO Auto-generated method stub 
    super.onPreExecute(); 
} 

} 
相关问题