2011-12-20 9 views
2

私はいつもこのエラーが出る私は(android.os.networkonmainthreadexceptionを)解決する方法を知らない

public class FlightAvailabityGoActivity extends ListActivity { 
String[] monthName = {"Jan", "Feb", 
      "Mar", "Apr", "May", "Jun", "Jul", 
      "Aug", "Sep", "Oct", "Nov", 
      "Dec" 
      }; 


date userDate=new date(); 
int DepDay=userDate.getDays(); 
int DepMonth=userDate.getMonths(); 

bean beanz=new bean(); 
private TextView fromToTextView; 
Calendar calendar = new GregorianCalendar(); 
    String am_pm; 
    String TAG="from"; 
    private TextView from,to; 
    languages lang=new languages(); 
    String En_Ar=lang.getLang(); 
    Element dest; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

    try{ 
    Log.v(TAG, "in go activity  " +TAG); 

    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    setContentView(R.layout.listplaceholder_flightavailabity); 
    if(En_Ar.equals("arabic")) 
    { 
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title_flightavailabity_ar); 
    // from=(TextView)findViewById(R.id.fromText); 
    // from.setText(" من "); 
    // to=(TextView)findViewById(R.id.toText); 
    //to.setText(" إلى "); 
    Log.v(TAG, "1  " +TAG); 
    } 
    else 
    { 
      Log.v(TAG, "1  " +TAG); 
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, 
    R.layout.window_title_flightavailabity); 
    } 






    //// 
    Bundle extras = getIntent().getExtras(); 

    String FromCity = extras.getString("from"); 
    String ToCity = extras.getString("to"); 
    Log.v(TAG, "from city after moving " +FromCity); 
    Log.v(TAG, "to city after moving " +ToCity); 






    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
    ArrayList<HashMap<String, String>> mylist1 = new ArrayList<HashMap<String, String>>(); 

    Log.v(TAG, "2  " +TAG); 
    //String xml = XMLfunctions.getXMLFlightAva(FromCity,ToCity); 
    String xml=XMLfunctions.getXMLFlightAva(FromCity,ToCity); // error is here 
    Log.v(TAG, "3  " +TAG); // this will not display 
    xml=xml.trim(); 
    Log.v(TAG, "4  " +TAG); 

私はそれについて、赤と私は、インターネットの使用についての理解が、私はそれを解決する方法がわかりませんか? あなたはすべてのものが

をクラッシュしたところ、私は私のXML機能のクラスにHTTP GETでXMLを読み、それがここに文字列にXMLを返す見ることができるように私は 文字列のxml = XMLfunctions.getXMLFlightInfo(FromCity)でクラスを変更する必要があります。

そのこれはAPIレベル9と、デフォルトの動作は、APIレベル11に変更されていたので、

   public class XMLfunctions { 
      String TAG; 



public final static Document XMLfromString(String xml){ 


    Document doc = null; 

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    try { 

     DocumentBuilder db = dbf.newDocumentBuilder(); 

     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(xml)); 
     doc = db.parse(is); 

    } catch (ParserConfigurationException e) { 
     System.out.println("XML parse error: " + e.getMessage()); 
     return null; 
    } catch (SAXException e) { 
     System.out.println("Wrong XML file structure: " + e.getMessage()); 
     return null; 
    } catch (IOException e) { 
     System.out.println("I/O exeption: " + e.getMessage()); 
     return null; 
    } 

    return doc; 

} 

/** Returns element value 
    * @param elem element (it is XML tag) 
    * @return Element value otherwise empty String 
    */ 
public final static String getElementValue(Node elem) { 
    Node kid; 
    if(elem != null){ 
     if (elem.hasChildNodes()){ 
      for(kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling()){ 
       if(kid.getNodeType() == Node.TEXT_NODE ){ 
        return kid.getNodeValue(); 
       } 
      } 
     } 
    } 
    return ""; 
} 
//////////////////////// 
public static String getXMLFlightInfo(String Y_or_T){ 
     String line = null; 
     String TAG="TAG"; 
     date userDate=new date(); 
     int DepDay=userDate.getDays(); 
     int DepMonth=userDate.getMonths(); 



     try { 

      DefaultHttpClient httpClient = new DefaultHttpClient(); 
     // HttpPost httpPost = new HttpPost("http://p-xr.com/xml"); 
      //HttpGet httpPost=new HttpGet("http://10.128.11.206:9080/mobile/FlightSchdIphoneServlet?depCity="+fromCity+"&arrCity="+toCity+"&day="+DepDay+"&month="+DepMonth+""); 
      //HttpGet httpPost=new HttpGet("http://mysv.net.sa/Web/mobile/FlightAvailIphoneServlet?depCity=JED&arrCity=RUH&day=29&month=11&submit=+GO+"); 
      HttpGet httpPost=new HttpGet("http://10.131.13.43:9080/onlineSMS/xmlFlightInfo.html"); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      line = EntityUtils.toString(httpEntity); 



     } catch (UnsupportedEncodingException e) { 
      line = "<array status=\"error\"><msg>Can't connect to server</msg></array>"; 
     } catch (MalformedURLException e) { 
      line = "<array status=\"error\"><msg>Can't connect to server</msg></array>"; 
     } catch (IOException e) { 
      line = "<array status=\"error\"><msg>Can't connect to server</msg></array>"; 
     } 

     return line; 

} 

答えて

3

StrictMode.ThreadPolicyが導入されたクラスです

  String xml=XMLfunctions.getXMLFlightAva(FromCity,ToCity); 

と同様の方法、これは要するに、ネットワーク操作(HttpClientとHttpUrlConnectionを含む)がUIスレッドで実行されるのを許可しません。

適切な方法は、ネットワークスレッドをUIスレッドから移動することです。たとえば、AsyncTaskを使用します。

このヘルプをご覧ください。

+0

私はoncreate()の下でのみ上記のコードを追加しますか?xmlfunctionメソッドは何ですか?if文でも、私の質問についてはごめんねですが、私はこの – user950003

+0

@ user950003の新機能です。あなたのアプリケーションが起動した後に一度実行すると、super.onCreate()を呼び出した直後であって、ネットワーク操作を行っている呼び出しの前に、あなたのMainActivity.onCreate()に最適な場所があります。 – yorkw

+0

あなたの回答が更新されました。 – user950003

関連する問題