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が言ったように、メソッド内でUIを実行する必要がありonPostExecute()ます。

このチュートリアルAsyncTasksは、について理解し、学ぶのにも非常に役立ちますThreads

于 2012-07-31T21:02:14.220 に答える
1

この例外が発生する理由は、UI スレッドで負荷の高い操作を実行しようとしているためです。これにより、アプリの速度が大幅に低下し、強制的に終了する可能性があります。代わりにAsyncTask(または)でコードをラップする必要があります。Thread

詳細については、これをお読みください:

Ice Cream Sandwich がアプリをクラッシュさせる理由

于 2012-07-31T21:20:00.640 に答える
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 に答える
0

AsyncTaskを使用してこの問題を解決できます。doInBackground() でネットワーキングを行い、onPostExecute() で UI の変更を行います。

于 2012-07-31T20:44:44.923 に答える