Monday, September 9, 2013

Android ปัญหาการใช้ HttpGet และ HttpPost กับ Android version 3 ขึ้นไป

เนื่องจาก Google ได้มีการบังคับ ThreadPolicy ที่เกี่ยวกับการติดต่ออินเตอร์เน็ตไม่ให้สามารถทำงานตรงๆบน UI Thread ได้ต้องใช้ AsyncTask และ doInBackground เข้ามาใช้งานด้วย ตัวอย่าง

    private class requestHttpTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {
          String response = "";
          for (String url : urls) {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            try {
              HttpResponse execute = client.execute(httpGet);
              if(execute.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
      {
     
      //http ok///

      }

            } catch (Exception e) {
              //e.printStackTrace();
            }
          }
          return response;
        }

        @Override
        protected void onPostExecute(String result) {
          //textView.setText(result);
        }

      }

วิธีเรียกใช้งาน


requestHttpTask task = new requestHttpTask();

task.execute(new String[] { "http://www.tonnark.com" });


อ้างอิงจาก
http://www.elvenware.com/charlie/development/android/SimpleHttpGetThread.html

Tuesday, September 3, 2013

Android คำสั่ง finish(); และ System.exit(0);

คำสั่ง finish() จะเป็นแค่การบอกว่าจบการทำงานแล้ว แต่ถ้าในโปรแกรมของเรายังรัน service หรือ Listener ใดๆอยู่ โปรแกรมก็จะยังทำงานต่อไปจนกว่าจะจบ service หรือ Listener นั้น
ดังนั้นบางคนที่ใช้คำสั่ง finish() แล้วยังสงสัยว่าทำไมโปรแกรมยังรันเบื้องหลังอยู่ไม่ยอมปิดจริงๆ ก็เพราะสาเหตนี้

ส่วนคำสั่ง System.exit(0) จะเป็นการบังคับให้โปรแกรมหยุดทำงานทันทีไม่ว่าจะมี service หรือ Listener ใดๆอยู่ก็ตาม เปรียบเหมือนการ force close ซึ่งในการใช้งานต้องระวังให้มากและต้องแน่ใจว่าไม่มีโพรเซสใดค้างอยู่แล้วไม่งั้นอาจทำให้โปรแกรม error ได้ เช่นมีคำสั่ง save หรือเขียนข้อมูลอยู่ซึ่งยังทำไม่เสร็จแล้วใช้คำสั่ง System.exit(0) จะทำให้การเซฟนั้นไม่สมบูรณ์และไฟล์ข้อมูลอาจเสียหายได้