2013-06-18 3 views
2

У меня есть одно приложение для Android. Здесь я должен создать страницу входа с подключением mysql с помощью мыльных веб-сервисов.Мыло webservices in android login

Мой код хорошо работает на Android версии 2.2, но не работает в android 4.0.

Итак, здесь я должен использовать asynchronousTask. Но я не знал, что asynchronousTask.please поможет мне решить эти проблемы.

EDIT:

я, используя следующий код:

public class AndroidLoginExampleActivity extends Activity { 
private final String NAMESPACE = "http://ws.userlogin.com"; 
private final String URL = "http://111.223.128.10:8085/AndroidLogin/services/Login?wsdl"; 
private final String SOAP_ACTION = "http://ws.userlogin.com/authentication"; 
private final String METHOD_NAME = "authentication"; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button login = (Button) findViewById(R.id.btn_login); 
    login.setOnClickListener(new View.OnClickListener() { 

public void onClick(View arg0) { 
new LongOperation().execute(); 

    } 
    }); 
    } 
class LongOperation extends AsyncTask<String, Void, String> { 
private ProgressDialog Dialog = new ProgressDialog(LoginActivity.this); 

@Override 
protected String doInBackground(String... aurl) { 
// TODO Auto-generated method stub 
loginAction(); 
return null; 
    } 

    protected void onPreExecute() { 
    Dialog.setMessage("Loading..."); 
    Dialog.show(); 
    } 

     protected void onPostExecute(String resultGot) { 
    Dialog.dismiss(); 
    } 
    } 
    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); 

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

    runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
     try{ 

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

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

    } 
    catch(Exception e){ 

    } 
     }); 
    } 

    } 

теперь я получаю ту же ошибку:

Перед тем, что:

Теперь я должен создать приложение на целевой версии Android 4.0 означает, что он хорошо работает на Android 2.2.but, но он не работает на android 4.0 version.please c heck мой код и дать мне решение.

+1

введите здесь свой logcat. – Riser

ответ

3

Шаг 1. Пожалуйста, сделайте класс, который extends AsyncTask в существующем AndroidLoginExampleActivity, как показано ниже:

class LongOperation extends AsyncTask<String, Void, String> { 
     private ProgressDialog Dialog = new ProgressDialog(OffersActivity.this); 

    @Override 
    protected String doInBackground(String... aurl) { 
     // TODO Auto-generated method stub 
     loginAction(); 
     return null; 
    } 

    protected void onPreExecute() { 
      Dialog.setMessage("Loading..."); 
      Dialog.show(); 
    } 

    protected void onPostExecute(String resultGot) { 
      Dialog.dismiss(); 
    } 
} 

шаг 2. Сделайте вызов вашего метода loginAction(); в который вы внедрили свой код реализации сервера.

Шаг 3. Выполнить LongOperation класс от AndroidLoginExampleActivityonCreate() метода вашей деятельности как ниже:

public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

new LongOperation().execute(); 

} 

Шаг 4. Так же вы хотите знать, что вы не можете сделать любую задачу UI в непосредственно в doInBackground() в вашем случае вы осуществление вида текста здесь, по этому вопросу вы должны сделать runOnUiThread(new Runnable(), а затем сделать код всех UI (в вашем случае TextView) .. Смотрите ниже кода ...

runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

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

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

     } 
     catch(Exception e){ 

     } 

    } 
     }); 

йо и может непосредственно вставить эту часть кода внутри метода loginAction() ....

Позвольте мне знать, если какой-либо путаницы ...

Надежда, теперь вы можете запустить приложение в ICS и Jellybean тоже ... :)

+0

Спасибо ... его очень полезно для меня ... да, я изучил асинхронную концепцию из этих сообщений. Спасибо за то, что вы делитесь своими знаниями .... – user2218667

+0

Теперь я создал приложение на целевом версия android 4.0 означает, что он хорошо работает на Android 2.2.but, но он не работал на android 4.0 version.please, проверьте мой код и дайте мне решение. – user2218667

2

Попробуйте С код ниже:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button login = (Button) findViewById(R.id.btn_login); 
    login.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View arg0) { 
       AsyncCallWS task = new AsyncCallWS(); 
      task.execute(); 

     } 
}); 
} 
private class AsyncCallWS extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 
     Log.i(TAG, "doInBackground"); 
     loginAction(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     Log.i(TAG, "onPostExecute"); 
    } 

    @Override 
    protected void onPreExecute() { 
     Log.i(TAG, "onPreExecute"); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     Log.i(TAG, "onProgressUpdate"); 
    } 

} 

private void loginAction(){ 
.... 
... 
}