2013-10-07 215 views
-2

我想從soap數據庫中使用soap獲取用戶名和密碼的值。但我得到'android.os.NetworkOnMainThreadException',請告訴我如何使用AsyncTask來避免此異常。android連接mysql數據庫

package com.example.androidloginexampleactivity;

import java.io.IOException; 

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.PropertyInfo; 
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.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class AndroidLoginExampleActivity extends Activity { 
    private final String NAMESPACE = "http://10.0.2.2:80/urn:stockserver"; 
    private final String URL = "http://10.0.2.2:80/stockserver1.php?wsdl"; 

    //private final String URL = " http://10.0.2.2:8080/WebApplication2/Login?Tester"; 
    private final String SOAP_ACTION = "http://10.0.2.2:80/urn:stockserver#getStockQuote"; 
    private final String METHOD_NAME = "getStockQuote"; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_android_login_example); 
     Button login = (Button) findViewById(R.id.btn_login); 
     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.tf_userName); 
     String user_Name = userName.getText().toString(); 
     EditText userPassword = (EditText) findViewById(R.id.tf_password); 
     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.VER10); 
     envelope.setOutputSoapObject(request); 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

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

      TextView result1 = (TextView) findViewById(R.id.tv_status); 
      result1.setText(response.toString()); 
      Toast.makeText(getApplicationContext(), response.toString(), 5).show(); 

     } 
     catch(Exception e){ 
      Toast.makeText(getApplicationContext(), e.toString(), 5).show(); 


     } 
    } 

} 
+0

Cmon有千言萬語的胡言亂語https://www.google.de/search?q=android+network+asynctask+tutorial&oq=android+network+asynctask+tutorial&aqs=chrome..69i57j69i60l5.4679j0&sourceid= chrome&espvd = 210&es_sm = 93&ie = UTF-8 –

+0

當你爲這個異常Google搜索時,你學到了什麼? – Simon

+0

可能重複的[android.os.NetworkOnMainThreadException](http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception) – njzk2

回答

0

由於Android 3.0,你可以不使用主線程上的網絡連接。你最好使用doInBackground創建一個AsynTask來執行你的httpget。

通過:@ marshallino16

this後。