我有一个Android应用程序。
我需要在单独的任务上执行代码,因为它对我来说是android.os.NetworkOnMainThreadException。
这是我的代码:
public class AccesoCuentaActivity extends Activity{
public void validacion(View v) throws IOException, XmlPullParserException
{
try {
String usuario=((EditText)findViewById(R.id.etUsu)).getText().toString();
String pass=((EditText)findViewById(R.id.etPass)).getText().toString();
String[] pars = new String[2];
String[] = new String[2];
pars[0] = usuario;
pars[1] = pass;
new ValidacionThread().execute(pars);
Intent intent=new Intent(this, MainActivity.class);
intent.putExtra("idBoton",12);
intent.putExtra("usuario",usu);
startActivityForResult(intent, 0);
} }
任务:
public class ValidacionThread extends AsyncTask<String, Void, Usuario> {
private final String NAMESPACE = "http://webservices.pcp/";
private final String URL = "http://127.0.0.1:8080/webServices/pcpWS?wsdl";
private final String SOAPACTION = "";
private final String METHOD = "ValidarUsuario";
protected Usuario doInBackground(String[] pars) {
String user = pars[0];
String password = pars[1];
SoapObject request = new SoapObject(NAMESPACE, METHOD);
SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11);
sobre.dotNet = false;
request.addProperty("login", user);
request.addProperty("password", password);
sobre.setOutputSoapObject(request);
HttpTransportSE transporte = new HttpTransportSE(URL);
try {
transporte.call(SOAPACTION, sobre);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SoapObject resultado = null;
try {
resultado = (SoapObject)sobre.getResponse();
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Usuario usu = new Usuario();
usu.IdUsuario= resultado.getProperty(0).toString();
usu.Nombre = resultado.getProperty(1).toString();
usu.Apellidos = resultado.getProperty(2).toString();
usu.Rol = resultado.getProperty(3).toString();
usu.Centro=resultado.getProperty(4).toString();
return usu;
}
protected void onPostExecute(ValidacionThread vt) {
}
}
它给了我两个问题:
1)在AccesoCuentaActivity课程中:
我想在 ValidationThread.doInBackground()中保存变量“usuario”return。但是我该怎么做呢?
确实如果我只写:new ValidacionThread()。execute(pars); 它告诉我变量“usu”(intent.putExtra(“usuario”,usu);)没有已初始化
while with code(在主代码中) Usuario usu = new ValidacionThread()。execute(pars); 它表示类型不匹配
2)在doInBackground()
行eclipse中给出警告:
Varargs方法应该仅覆盖或被ValidacionThread.doInBackground(String[])
和AsyncTask<String,Void,Usuario>.doInBackground(String...)
答案 0 :(得分:0)
由于这是异步任务,您需要为该数据创建一种返回方式。 我建议创建一个像:
这样的界面 interface{
public void parseData(Usuario data);
}
并在您的活动类中实现它。
然后我会将活动的实例传递给构造函数中的异步任务。
然后在你的ValidationThread:
protected void onPostExecute(Usuario vt) {
activityInstance.parseData(vt);
}
至于第二部分,将String []更改为String ..