2013-06-07 3 views
0

Я использую AsnycTask для подключения URL и синтаксический возврата XML:AsyncTask использования на Android

class Connecting extends AsyncTask<String, String, String> { 
    private String URLPath = ""; 
    private HttpURLConnection Connection; 
    private InputStream InputStream; 
    private boolean Return1 = false; 
    private int Return2 = -1; 

    public Connecting (String fn, String u) { 
     FileName = fn; 
    URLPath = u; 
     Connection = null; 
    InputStream = null; 

    Return1 = false; 
    Return2 = -1; 

    execute(); 
    } 

    public boolean getReturn1() { 
    return Return1; 
    } 

    public int getReturn2() { 
    return Return2; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... aurl) { 
     try { 
      URL url = new URL(URLPath); 
      Connection = (HttpURLConnection)url.openConnection(); 
      Connection.setConnectTimeout(10000); 
      Connection.setReadTimeout(10000); 
      Connection.setDoInput(true); 
      Connection.setUseCaches(false); 
      Connection.connect(); 
      InputStream = Connection.getInputStream(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String unused) { 
     super.onPostExecute(unused); 

     try { 
      InputStreamReader fsr = new InputStreamReader(InputStream); 

      BufferedReader br = new BufferedReader(fsr); 
      String line = ""; 
      while((line = br.readLine()) != null) { 
       //parse Reture1 and Return2 
      } 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
     Connection = null; 
    } 
} 

И я использую ниже код, чтобы назвать его:

Connecting con = new Connecting(Name, URL); 
System.out.println("Return1 " + con.getReturn1()); 
System.out.println("Return2 " + con.getReturn2()); 

Он получит false и -1, которые значение init.
И подключите URL-адрес после сообщения печати.
Я хочу получить значение, которое имеет успех соединения и анализ из xml.
Как я могу это сделать?

+1

http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a –

ответ

1

AsyncTask - это класс, который помогает работать в фоновом режиме. Вы можете использовать его, если хотите получить доступ к удаленному серверу, используя, например, HTTP-соединение. В методе doBackground вы должны выполнить «тяжелую» задачу, которая требует времени и может блокировать пользовательский интерфейс. Когда вы закончите в конце doBackground, вы должны вернуть значение, являющееся результатом задачи. Затем в onPostExecute вы используете этот результат для обновления, например, пользовательского интерфейса. В вашем случае мне кажется, что вы неправильно используете AsyncTask. Прежде всего, вы возвращаете null в doBackground и не устанавливаете return1 и return2, как вам следует. И в onPostExecute вы читаете ответ, в то время как yuo должен делать это в doBackground. Существует еще один метод, который вы можете переопределить вызываемый onPreExecute, который вызывается до метода doBackground.

В моем блоге у меня есть пример использования AsyncBackground в этом случае, и это может вам помочь. Если вы хотите, чтобы посмотреть фото: here

1

AsyncTask запускает (как указано название) асинхронно к основной теме. Если вы хотите что-то сделать после выполнения задачи, вы должны поместить этот код в метод onPostExecute(). Итак, вы можете поставить System.out.

Смежные вопросы