0

我有这个例外。我如何使用线程概念来做到这一点?

public class WebService extends AsyncTask<String, String, String>{

    private final String NAMESPACE ="http://tempuri.org/";//"http://localhost:9583/YP_Android_WebService/YP_Android_WebService.asmx";//
    private final String URL ="http://10.0.2.2:1243/YP_Android_WebService/YP_Android_WebService.asmx?WSDL";

    public boolean checkUser(String _EmailID, String _Password) {

         boolean result = false; 

        final String SOAP_ACTION ="http://tempuri.org/checkUser";//"http://localhost:9583/YP_Android_WebService/YP_Android_WebService.asmx/checkUserLogin";//
        final String METHOD_NAME = "checkUser";

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        PropertyInfo propertyInfoEmail = new PropertyInfo();
        propertyInfoEmail.setName("_EmailID");
        propertyInfoEmail.setValue(_EmailID);
        propertyInfoEmail.setType(String.class);
        request.addProperty(propertyInfoEmail);

        PropertyInfo propertyInfoPassword = new PropertyInfo();
        propertyInfoPassword.setName("_Password");
        propertyInfoPassword.setValue(_Password);
        propertyInfoPassword.setType(String.class);
        request.addProperty(propertyInfoPassword);

         final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true; // put this only if the web service is .NET one
            envelope.setOutputSoapObject(request);
            final HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

        try {


            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
            Log.i("myApp", response.toString());
            if(response.toString().equalsIgnoreCase("true")){
                result = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

例外是在这一点上。

androidHttpTransport.call(SOAP_ACTION, 信封); ti 抛出 NetworkonMainThread 异常。

谁能帮助我使用线程概念来做到这一点

4

4 回答 4

4

你没有Asynctask正确使用。您有未实现的方法。您必须在方法中执行所有网络/数据库操作doInBackground(),正如@Dirk 所说,onPostExecute()方法中的 UI。

教程对您了解AsyncTasks和了解更多有关Threads.

于 2012-07-31T21:02:14.220 回答
1

您收到此异常的原因是您试图在 UI 线程上执行昂贵的操作,这会显着减慢您的应用程序并导致它强制关闭。您应该将代码包装在AsyncTask(or Thread) 中。

阅读本文了解更多信息:

为什么冰淇淋三明治会使您的应用程序崩溃

于 2012-07-31T21:20:00.640 回答
0

您可以使用AsyncTask来解决此问题。在 doInBackground() 中做网络,在 onPostExecute() 中修改 UI。

于 2012-07-31T20:44:44.923 回答
0

您应该使用 Asynctask,但如果您不想简单地添加以下代码片段(尽管不推荐):

if (android.os.Build.VERSION.SDK_INT > 9) { // disabling strict-mode
                                                    // for newer builds
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
于 2012-07-31T21:10:21.077 回答