2016-12-31 8 views
-2

XMLファイルをUrlから解析し、ファイル内のLat値を取得しようとしていますデバッグ用のトーストウィンドウ。私はこのエラーを取得しています:Android AsyncTaskエラー[Looper.prepare()を呼び出していないスレッド内でハンドラを作成できません]

public void getGpx(String area) { 
    final String area2 = area; 
    new GHAsyncTask<Void, Void, List<String>>() { 
     protected List<String> saveDoInBackground(Void... params) 
       throws Exception { 
      String urlString = fileListURL + area2 + ".gpx"; 
      logUser(urlString); 
      ArrayList testingXml = null; 
      try { 
       URL url = new URL(urlString); 
       URLConnection conn = url.openConnection(); 

       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder builder = factory.newDocumentBuilder(); 
       Document doc = builder.parse(conn.getInputStream()); 

       NodeList nodes = doc.getElementsByTagName("trkpt"); 
       for (int i = 0; i < nodes.getLength(); i++) { 
        Element element = (Element) nodes.item(i); 
        NodeList title = element.getElementsByTagName("lat"); 
        Element line = (Element) title.item(0); 
        testingXml.add(line.getTextContent()); 
       } 
      } catch (IOException e) { 
       throw new RuntimeException(e); 
      } catch (SAXException e) { 
      } catch (ParserConfigurationException a) { 
      } 
      return testingXml; 

     } 


     @Override 
     protected void onPostExecute(List<String> gpxList) { 
      if (hasError()) { 
       getError().printStackTrace(); 
       logUser("Are you connected to the internet? Problem while fetching remote area list: " 
         + getErrorMessage()); 
       return; 
      } else if (gpxList == null || gpxList.isEmpty()) { 
       logUser("something went wrong"); 
       return; 
      } 

      logUser(gpxList.toString()); 

     } 
    }.execute(); 


} 

私は願っています:「スレッド内のハンドラを作成することはできませんLooper.prepareと呼ばれていない()」

これは私が現在使用しているコードです誰かが私にこのエラーを解決させる助けになるでしょう。コードにはまだ私が見つけていない他のエラーがあるかもしれません。これを一枚にしようとするルーキー。

答えて

0

asynctask内の関数の中には、UIスレッドを呼び出すものがあります。onPreExecute、onPostExecute、またはasynctaskの実行中にpublishProgressを使用してUIスレッドを呼び出すことができます。

+0

私は上部のlogUser()を見落としました。これはトーストウィンドウを呼び出していました。ありがとう! –

関連する問題