Java AsyncTask与HTTP get和fetch of.xml

Java AsyncTask与HTTP get和fetch of.xml,java,android,xml,multithreading,android-asynctask,Java,Android,Xml,Multithreading,Android Asynctask,我正在开发一个Android应用程序,通过点击按钮,我可以控制Arduino板的数字状态。Arduino使用运行时创建的XML文件进行响应,通过获取其内容,我希望显示管脚的实际状态 现在,我可以意识到,实际上我的应用程序可以工作,但我无法在AsyncTask实例中处理fetchXML()方法。有时候我的UI会冻结,我不想这样 这是我主要活动的代码: public class MainActivity extends ActionBarActivity { private String url

我正在开发一个Android应用程序,通过点击按钮,我可以控制Arduino板的数字状态。Arduino使用运行时创建的XML文件进行响应,通过获取其内容,我希望显示管脚的实际状态

现在,我可以意识到,实际上我的应用程序可以工作,但我无法在AsyncTask实例中处理fetchXML()方法。有时候我的UI会冻结,我不想这样

这是我主要活动的代码:

public class MainActivity extends ActionBarActivity {

private String url = "http://192.168.0.254/?domotica";
private EditText button1,button2,button3,button4;
private HandleXML obj;

@Override
protected void onCreate(Bundle savedInstanceState) {

  /*  if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new     StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
  */
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button1 = (EditText)findViewById(R.id.editText1);
    button2 = (EditText)findViewById(R.id.editText2);
    button3 = (EditText)findViewById(R.id.editText3);
    button4 = (EditText)findViewById(R.id.editText4);



    Button led1on = (Button) findViewById(R.id.led_1on);
    Button led1off = (Button) findViewById(R.id.led_1off);

    led1on.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v){
            //commandArduino("http://192.168.0.254/?b1o");
            Invio inv = new Invio();
            inv.execute("http://192.168.0.254/?b1o");

        }
    });

    led1off.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v){
            //commandArduino("http://192.168.0.254/?b1f");
            Invio inv = new Invio();
            inv.execute("http://192.168.0.254/?b1f");
        }
    });

}

private class Invio extends AsyncTask<String,Void,String> {

 @Override
 protected String doInBackground(String... params) {
     int count = params.length;

     for (int i = 0; i < count; i++) {
         try {
             HttpClient httpclient = new DefaultHttpClient();
             httpclient.execute(new HttpGet(params[i]));
         } catch (Exception e) {
             e.printStackTrace();

         }
     }
     return null;
 }
}

public void open(View view){
    String finalUrl = url;
    obj = new HandleXML(finalUrl);
    obj.fetchXML();
    while(obj.parsingComplete);
    button1.setText(obj.getbutton1());
    button2.setText(obj.getbutton2());
    button3.setText(obj.getbutton3());
    button4.setText(obj.getbutton4());

}

/*public void commandArduino(String urlz) {


}*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

根据@njzk的建议,问题出在这一陈述中:

while(obj.parsingComplete);

这会产生一个无休止的循环,我已经删除了它,现在它开始工作。

没有人能帮我?
while(obj.parsingplete)这是显式冻结您的ui。为此使用异步任务。
while(obj.parsingComplete);