Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用webservice时发生严重异常AsyncTask3错误_Android_Eclipse_Android Asynctask_Fatal Error - Fatal编程技术网

Android 调用webservice时发生严重异常AsyncTask3错误

Android 调用webservice时发生严重异常AsyncTask3错误,android,eclipse,android-asynctask,fatal-error,Android,Eclipse,Android Asynctask,Fatal Error,我正在尝试调用webservice并将返回值从服务设置为textview。但当我点击按钮时,我得到了那个致命的异常错误。我的错在哪里 Java代码:` public class Login extends Activity { private String SOAP_ACTION = "http://appointmentsystem.somee.com/HelloWorld"; private String METHOD_NAME = "HelloWorld"; private String

我正在尝试调用webservice并将返回值从服务设置为textview。但当我点击按钮时,我得到了那个致命的异常错误。我的错在哪里

Java代码:`

public class Login extends Activity {

private String SOAP_ACTION = "http://appointmentsystem.somee.com/HelloWorld";
private String METHOD_NAME = "HelloWorld";
private String NAMESPACE = "http://appointmentsystem.somee.com/";
private String URL = "http://appointmentsystem.somee.com/Service1.asmx";

private SoapObject request = null;
private SoapSerializationEnvelope envelope;
private HttpTransportSE androidHttpTransport;
private SoapPrimitive response;

private EditText loginEdtUser, loginEdtPassword;
private Button loginBtnEnter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    loginEdtUser = (EditText) findViewById(R.id.loginEdtUser);
    loginEdtPassword = (EditText) findViewById(R.id.loginEdtPassword);
    loginBtnEnter = (Button) findViewById(R.id.loginBtnEnter);

    loginBtnEnter.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            AsyncCallWS task = new AsyncCallWS();
            task.execute();
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.login, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}

private class AsyncCallWS extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... params) {
        Login();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }

}

public void Login() {
    try {
        request = new SoapObject(NAMESPACE, METHOD_NAME);

        envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);

        androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.debug = true;

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

            loginEdtUser.setText(response.toString());
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), "Hata:" + e.toString(),
                    Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(), "Hata:" + e.toString(),
                Toast.LENGTH_SHORT).show();
    }

}
错误:

{02-28 11:31:16.935: E/AndroidRuntime(4489): FATAL EXCEPTION: AsyncTask #3
02-28 11:31:16.935: E/AndroidRuntime(4489): Process: oziylmz.randevusistemi, PID: 4489
02-28 11:31:16.935: E/AndroidRuntime(4489): java.lang.RuntimeException: An error occured while executing doInBackground()
02-28 11:31:16.935: E/AndroidRuntime(4489):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at java.lang.Thread.run(Thread.java:841)
02-28 11:31:16.935: E/AndroidRuntime(4489): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
02-28 11:31:16.935: E/AndroidRuntime(4489):     at android.os.Handler.<init>(Handler.java:200)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at android.os.Handler.<init>(Handler.java:114)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at android.widget.Toast$TN.<init>(Toast.java:351)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at android.widget.Toast.<init>(Toast.java:101)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at android.widget.Toast.makeText(Toast.java:265)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at oziylmz.randevusistemi.Login.Login(Login.java:109)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at oziylmz.randevusistemi.Login$AsyncCallWS.doInBackground(Login.java:69)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at oziylmz.randevusistemi.Login$AsyncCallWS.doInBackground(Login.java:1)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
02-28 11:31:16.935: E/AndroidRuntime(4489):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)}

您将得到以下错误:

 Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
这意味着您必须尝试在后台更改UI,正如我看到的代码一样,您必须尝试在捕获登录方法中使用Toast数据

您不能在后台线程中更新UI,必须处理onPostExecute中的错误或创建处理程序对象并使用它

您可以通过以下方式解决您的问题:

1-RunUnuithRead

2-处理程序

3-移动到onPostExecute

有关更多信息,请参阅以下文章:

这会导致异常,因为您无法在后台处理中触摸ui元素

修正: 在异步任务的onPostexecute方法中执行toast,而不是在要使用的UI线程上执行toast

 runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Login();
                    }
             });

或者,如果你真的不需要,你也可以简单地评论吐司。
 Toast.makeText(getApplicationContext(), "Hata:" + e.toString(),
                Toast.LENGTH_SHORT).show();
 runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Login();
                    }
             });