วันเสาร์ที่ 17 ตุลาคม พ.ศ. 2558

Tip2 : Android รวมคำสั่ง และปัญหาที่พบบ่อยๆ จากประสบการณ์

============ ERROR ที่พบบ่อย ===============
1 . Gradle DSL method not found: 'runProguard()'
ที่ไฟล์ build.gradle เปลี่ยนดังนี้
runProguard false >> minifyEnabled false
..........................................................................................................................
2.SecurityException: Permission denied (missing INTERNET permission?)
เพิ่มบรรทัดนี้ลงไปที่ AndroidManifest.xml

..........................................................................................................................
3.FATAL EXCEPTION: main android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
1) Don't write network call in Main UI Thread, Use Async Task for that.
2) Write below code into your MainActivity file after setContentView(R.layout.activity_main);

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}
..........................................................................................................................
4. Error:(10, 8) error: class MyPageAdapter is public, should be declared in a file named MyPageAdapter.java
ตั้งชื่อไฟล์ java ไม่ตรงกับชื่อ class ให้แก้ให้ตรงกันซะ (ตรง
MyPageAdapter ของท่านจะปรากฏไม่เหมือนกัน แล้วแต่ชื่อ)
 ..........................................................................................................................
5.no such table : message หรือขึ้นว่าไม่มี table
-ให้ตรวจสอบว่าสร้างแล้วยัง ถ้าคำสั่งถูกหมดให้ลองเปลี่ยนชื่อ table ใหม่
-ลองเปลี่ยนเวอร์ชั่น database sqllite ใหม่
..........................................................................................................................




===========TIP ใช้ประจำ=============
1.ส่งตัวแปรข้ามหน้า

ใน MainActivity.java
Intent in = new Intent(MainActivity.this,SecondActivity.class);    //มี class ปัจจุบันเป็น MainActivity.java และ class ปลายทาง SecondActivity.java
in.putExtra("key",value);    //ส่งตัวแปรพร้อมค่า
startActivity(in);     //เปลี่ยนหน้าไปปลายทาง

ใน SecondActivity.java
Intent in = getIntent();
String var = in.getStringExtra("key");    //รับตัวแปร
..........................................................................................................................
2.วันเวลา
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        long today = (new Date()).getTime();        //เวลาขณะนี้
        long bday = 0;
        String birthday = dpBirthday.getYear() + "-" + (dpBirthday.getMonth()+1) + "-" + dpBirthday.getDayOfMonth();
        try {
            bday = formatter.parse(birthday).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long age = (today-bday)/(1000*60*60*24);
..........................................................................................................................
3.JSON
อ่านจากสตริงเดียว
String json = "{\"sName\":\"Sawatdee : Weerachai Nukitram\",\"sEmail\":\"Sawatdee : is_php@hotmail.com\"}";
JSONObject c = new JSONObject(json);
String strResultName = c.getString("sName");
String strResultEmail = c.getString("sEmail");

อ่านจาก array 2d
String strJSON = "[{\"MemberID\":\"1\",\"Name\":\"Weerachai\",\"Tel\":\"0819876107\"}" +
                 ",{\"MemberID\":\"2\",\"Name\":\"Win\",\"Tel\":\"021978032\"}" +
                 ",{\"MemberID\":\"3\",\"Name\":\"Eak\",\"Tel\":\"0876543210\"}]";

    JSONArray data = new JSONArray(strJSON);
   
    ArrayList> MyArrList = new ArrayList>();
    HashMap map;
   
    for(int i = 0; i < data.length(); i++){
              JSONObject c = data.getJSONObject(i);
             
              map = new HashMap();
              map.put("MemberID", c.getString("MemberID"));
              map.put("Name", c.getString("Name"));
              map.put("Tel", c.getString("Tel"));
              MyArrList.add(map);
             
    }

อ่านจากหลายมิติ
try
    {  
        String jsonString="";//your json string here
        JSONObject jObject= new JSONObject(jsonString).getJSONObject("categories");
        Iterator keys = jObject.keys();
        while( keys.hasNext() )
        {
            String key = keys.next();
            Log.v("**********", "**********");
            Log.v("category key", key);
            JSONObject innerJObject = jObject.getJSONObject(key);
            Iterator innerKeys = innerJObject.keys();
            while( innerKeys.hasNext() )
            {
                String innerKkey = keys.next();
                String value = innerJObject.getString(innerKkey);
                Log.v("key = "+key, "value = "+value);
            }
        }
    }
    catch (JSONException e)
    {   e.printStackTrace();    }
..........................................................................................................................
4.ใส่เส้นคั่นหน้า
                    android:layout_height="1dip"
            android:background="#CCCCCC" />
..........................................................................................................................
5.Layout ต่างๆ
1. Linear Layout เรียงเป็นเส้นตรง แนวนอน หรือ แนวตั้ง โดยใช้คำสั่ง
android:orientation = "horizontal"
android:orientation = "vertical"

2. Relative Layout เรียงตามตำแหน่งอ้างอิงกับ element อื่นๆ ในเลย์เอาต์ หรือ อ้างอิงกับเลย์เอาต์ที่ตัว element นั้นอยู่ โดยใช้คำสั่ง
android:layout_below = "@android:id/text1"
android:layout_toRightOf = "@android:id/checkbox"

3. Frame Layout เป็นการเรียงแบบ stack คือตัวที่สร้างทีหลังจะวางอยู่บนสุด

4. Absolute Layout เป็นการเรียงแบบที่เรากำหนดตำแหน่ง โดยใช้คำสั่ง
android:layout_x="100dp"
android:layout_y="50dp"

5. Table Layout เป็นการเรียงแบบตาราง โดยที่ control แต่ละตัวจะถือเป็น 1 คอลัมน์
โดยจะใช้ .. ครอบแต่ละแถวของตาราง

..........................................................................................................................
6.ใส่ background
android:background="@drawable/bg"
..........................................................................................................................
7.Full Screen app

เปลี่ยน extends เป็น Activity (ห้ามเป็น actionbarActivity) , เพิ่ม 3 บรรทัดนั้นก่อน setContent

public class FullScreen extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.main);
    }
}

หรือใช้วิธี
Alternatively you can add
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
to AndroidManifest.xml under
..........................................................................................................................
8.ทำให้ element ภายในพอดี
 android:scaleType="centerCrop"
..........................................................................................................................
9.ทำให้ปุ่มกระพริบเป็นอีกภาพเมื่อคลิก

 
                android:drawable="@drawable/button_pressed" />
                android:drawable="@drawable/button_focused" />
    
 

แล้ว save ไว้ใน drawable folder เช่น button.xml
ส่วนใน button activity เพิ่ม android:src="@drawable/button"
..........................................................................................................................
10.รับรู้เมื่อปุ่มถูกกด
 final Button button = (Button) findViewById(R.id.button_id);
         button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // Perform action on click
             }
         });
หรือ
android:onClick="selfDestruct"
แล้วเพิ่ม
 public void selfDestruct(View view) {
     // Kabloey
 }
..........................................................................................................................
11. เรียกใช้ JSON
JSONArray arr = new JSONArray(result);
JSONObject jObj = arr.getJSONObject(0);
String date = jObj.getString("NeededString");
..........................................................................................................................
12. ทำให้มีหลายแท็ป
http://www.thaicreate.com/mobile/android-tabhost.html
http://devahoy.com/2014/09/android-tab-with-tabhost-and-actionbar-tab/
http://www.akexorcist.com/2014/11/lets-fragment-view-pager-1.html
ใส่รูปใน tab ด้วย view
http://stackoverflow.com/questions/14535085/add-image-or-style-to-each-tab
..........................................................................................................................
13.การนำภาพมาใช้ เช่น button.jpg จากโฟลเดอร์ Drawable
getResources().getDrawable(R.drawable.button)
..........................................................................................................................
14.เพิ่มสี
Then declare gray in your res\values\strings.xml
#808080
แล้วเรียกใช้ผ่าน @color/grey ได้เลย
..........................................................................................................................
15.การเปลี่ยน string เป็น string[]
String[] ary = "abc".split("");
ary จะเป็น {"a","b","c"}
..........................................................................................................................
16.SQLLITE การลบ
// Delete Data
    public long DeleteData() {
        // TODO Auto-generated method stub
        try {
            SQLiteDatabase db;
            db = this.getWritableDatabase(); // Write Data
            db.delete(TABLE_MEMBER, null, null);
            return 0;
        } catch (Exception e) {
            return -1;
        }
    }
..........................................................................................................................
17.refresh activity ใหม่
finish();
startActivity(getIntent());
..........................................................................................................................
18.android life cycle
http://startandroid.ru/en/lessons/complete-list/232-lesson-24-activity-lifecycle-example-about-changing-states-with-two-activities.html
..........................................................................................................................
19.kill thread
myService.getThread().interrupt();
..........................................................................................................................
20.Custom list view
http://www.akexorcist.com/2012/09/android-code-custom-list-view.html
..........................................................................................................................
21.การอัพเดท listview
เอาโค้ดนี้ไว้ที่ไหนก็ได้ เช่น เมท็อตรีเฟชร ให้ Thread เรี่ยกใช้ หรือ onResume()
adapter.getData().clear();    //เข้าไปลบ data ใน adapter (ต้องทำ method getData() ไว้ที่ adapter ด้วย)
adapter.setData(m.SelectAllData());    //เข้าไปเพิ่ม data ใน adapter เป็นตัวใหม่ ต้องมีเมท็อตเหมือนกัน
adapter.notifyDataSetChanged();       
listView.invalidateViews();
listView.refreshDrawableState();
..........................................................................................................................
22.ทำให้ Thread สามารถเรียกเมท็อดได้ ให้ครอบด้วย handler
 handler.post(new Runnable() {
                public void run() {
                    f.refresh1(); //เมท็อดที่จะเรียก
                }
            });
..........................................................................................................................
23. Print to console
Log.d("array", a.size() + "");
..........................................................................................................................
24.สร้างตัวแจ้งเตือน
Toast.makeText(getApplicationContext(),
                                    "Sorry", Toast.LENGTH_SHORT).show();
..........................................................................................................................
25.ทำ popup แบบมีหลายตัวเลือก
http://devahoy.com/2014/04/android-dialog-and-custom-dialog-example/#multi-choice-dialog
..........................................................................................................................


=====================hot-key=====================
[[android : pc]]
Home = Home
Back = esc
Power = F7
Menu = F2
VolUp = Ctrl-F5
VolDown = Ctrl-F6
Press ALT+spacebar together, then release and press m. You are now in Move mode. press Enter to exit Move mode.

ออโต้อิมพอต
http://stackoverflow.com/questions/16615038/what-is-the-shortcut-to-auto-import-all-in-android-studio

ไม่มีความคิดเห็น:

แสดงความคิดเห็น