I dont know how to solve (android.os.networkonmain

2020-07-25 02:54发布

I always get this error

   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);

I red about it and I understand its about using internet but I don't know how to solve it? as you can see I read XML by HTTP get in my XML function class and it returns XML in string here where every thing crashed

Do I have to change the class in String xml=XMLfunctions.getXMLFlightInfo(FromCity);

its the same method as

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

this is the class

             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;

}

标签: android
1条回答
趁早两清
2楼-- · 2020-07-25 03:17

StrictMode.ThreadPolicy was introduced since API Level 9 and the default behaviour had been changed in API Level 11, which in short, does not allow network operation (include HttpClient and HttpUrlConnection) get executed on UI thread.

The correct strategy is move network operation off the UI thread, for example using AsyncTask.

hope this help.

查看更多
登录 后发表回答