Java Android线程获取参数

Java Android线程获取参数,java,android,multithreading,android-intent,Java,Android,Multithreading,Android Intent,我试图从一个线程中获取一些信息,但我不知道如何获取。 我从未使用过线程,我的问题是关于这一点 我有一个活动,它使用带有一个线程的Web服务。在此之后,如果结果为真,我想做一些操作,如果结果为假,我想做其他操作 我不能修改线程中的局部或全局变量,因此我不知道如何做。我不想把意图扯进去 有没有办法返回这个结果?谢谢 这是我的活动代码: public class RegisterActivity extends Activity { //Constantes para la invocacion d

我试图从一个线程中获取一些信息,但我不知道如何获取。 我从未使用过线程,我的问题是关于这一点

我有一个活动,它使用带有一个线程的Web服务。在此之后,如果结果为真,我想做一些操作,如果结果为假,我想做其他操作

我不能修改线程中的局部或全局变量,因此我不知道如何做。我不想把意图扯进去

有没有办法返回这个结果?谢谢

这是我的活动代码:

public class RegisterActivity extends Activity {

//Constantes para la invocacion del web service
private static final String NAMESPACE = "http://webservice.proyecto";
private static String URL="http://192.168.1.34:8080/BDManejador/services/conexion?wsdl";
private static final String METHOD_NAME = "nuevo_usuario";
private static final String SOAP_ACTION ="http://ws.webapp.ejemplo/nuevo_usuario";  

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
}

public void goMainMenu (View v) {

    final EditText email = (EditText)findViewById(R.id.user);
    final EditText password = (EditText)findViewById(R.id.pass);
    EditText repeat_password = (EditText)findViewById(R.id.rpass);

    // COMPROBAR EMAIL VALIDO
    if((email.getText().toString().length() == 0) || (!email.getText().toString().contains("@")) ||(!email.getText().toString().contains("."))) {
        Toast toast= Toast.makeText(getApplicationContext(), "DIRECCIÓN DE CORREO ELECTRÓNICO NO VÁLIDA", Toast.LENGTH_LONG);
        toast.show();
    }
    else {

        // COMPROBAR CONTRASEÑA REPETIDA IGUAL
        if((password.getText().toString().compareTo(repeat_password.getText().toString()) == 0) && (password.getText().toString().length()!=0)) {

            // USAMOS EL WEBSERVICE

            Thread networkThread = new Thread() {
                @Override
                public void run() {
                  try {
                     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);          
                     request.addProperty("email", email.getText().toString());
                     request.addProperty("pass", password.getText().toString());

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

                     HttpTransportSE ht = new HttpTransportSE(URL);
                     ht.call(SOAP_ACTION, envelope);
                     final  SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
                     final boolean str = Boolean.parseBoolean(response.toString());
                     if (str) {
                         Log.v("MYAPP",  "INSERTADO");
                     }
                     else
                         Log.v("MYAPP",  "NO INSERTADO");
                  } 
                 catch (Exception e) {
                     e.printStackTrace();
                 }
                }
            };
            networkThread.start();

            //ESPERAR QUE TERMINE LA OPERACION
            try {
                networkThread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }               

            //LANZAR LA NUEVA ACTIVIDAD
            Intent intent = new Intent(RegisterActivity.this, MenuActivity.class);
            startActivity(intent);

        }
        else {
            Toast toast= Toast.makeText(getApplicationContext(), "LAS CONTRASEÑAS DEBEN SER IGUALES", Toast.LENGTH_LONG);
            toast.show();
        }
    }

}

}
所以我想在变量boolean
str
为真时抛出我的意图


有人可以帮忙吗?

我认为您需要在线程中使用处理程序

创建线程时传递新的处理程序

在线程内部,使用handler.post(new Runnable(){public void run(){aMethod();}})


然后,在线程之外(在活动类中)实现aMethod来执行任何您想做的事情。

UI不能在其他一些非UI线程上操作

我认为您应该使用
AsyncTask
接口

见本参考资料:


对于这样长时间且耗时的后台任务,
AsyncTask
是最佳选择。通过它,您可以轻松地在后台执行操作,并且在完成作业后,您可以通过
onPostExecute
方法更新UI。

从android或标准Javau使用可以从不同的线程操作UI组件,如果您使用@anfy2002us,我知道,但在这里从正常运行的线程调用它并不可取。因此,在这种情况下使用AsyndTask很好。谢谢!!因此,当“父”线程完成时,UIthread开始运行?@user1751840在
doInBackground
job
onPostExecute
方法完成后,将由
AsyncTask
本身调用。我们不需要手动处理。