PracticU

Download Image

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Download Image
מילון מושגים:
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
HTTP - פרוטוקול להעברת דפי אינטרנט ונתונים בין דפדפן לשרת. הגרסה המאובטחת שלו היא HTTPS.
Activity - ב-Android, רכיב שמייצג מסך יחיד של האפליקציה שאיתו המשתמש מתקשר.
ממשק - נקודת מגע בין רכיבים: ממשק משתמש שבו אדם מפעיל תוכנה, או ממשק תכנותי שמגדיר אילו פעולות רכיב אחד חושף לאחר.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.

Download Image
הופכים את TextDownloader ל-ImageDownloader, כדי להוריד מקישור מרוחק תמונה במקום טקסט ולהציג אותה ב-ImageView.
השלבים העיקריים
1. שינוי שם והטיפוסים: משנים את שם המחלקה ל-ImageDownloader. הקלט נשאר String, כתובת התמונה, ובמקום התוצאה String כותבים Bitmap. כך גם ב-doInBackground, ב-onPostExecute וב-onSuccess(Bitmap downloadedBitmap).
2. פחות רכיבים: נשארים HttpURLConnection ו-InputStream. InputStreamReader, BufferedReader ו-StringBuilder מיותרים, כי הם נועדו לקריאת שורות טקסט, ומוחקים אותם גם מה-finally.
3. בדיקת התשובה: נשארת הבדיקה של קוד הסטטוס. אם הוא לא HTTP OK שומרים את getResponseMessage ומחזירים null, וב-onPostExecute null מוביל ל-onError.
4. המרה לתמונה: מקבלים getInputStream ומחזירים BitmapFactory.decodeStream(inputStream), שקורא את המידע בסטרים ומפרש אותו כ-bitmap.
5. ב-Activity: ה-Activity מממשת את הממשק החדש. ב-onAboutToBegin קוראים ל-imageView.setImageBitmap(null) כדי לנקות את התמונה הקודמת, ומציגים דיאלוג. ב-onSuccess מסירים את הדיאלוג וקוראים ל-setImageBitmap(downloadedBitmap). ב-onError מסירים את הדיאלוג ומציגים Toast.
6. הפעלה: לוחצים על הכפתור, ובו בונים ImageDownloader עם this וקוראים ל-execute עם הקישור הקבוע בקוד. בהדגמה נבחר קישור ישיר לתמונת JPEG של חתול. צריך לוודא שיש הרשאת אינטרנט ב-manifest.
בהרצאה רואים את הדיאלוג ואחריו את התמונה. כך אפשר להוריד גם טקסט וגם תמונות באותה צורה.
השיעור הבא בקורס: Download Image in Packets

פרקי ההרצאה: Download Image

  1. 00:00

    הורדת תמונה עם ImageDownloader

  2. 01:03

    החזרת Bitmap במקום String

  3. 02:26

    מעבר על הקוד לשינויים הדרושים

  4. 04:02

    בדיקת Status Code והחזרת null

  5. 04:57

    המרת הסטרים עם BitmapFactory

תמלול ההרצאה: Download Image

הטקסט המלא של הדקות הראשונות בהרצאה «Download Image» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

    בסרטונים הקודמים ניגשנו דרך הטקסט דאונלודר שבנינו לאיזשהו API מרוחק והבנו מידע טקסטואלי. בסרטון הזה אנחנו הולכים לראות איך אנחנו יכולים לגשת ולהחזיר תמונה ולא מידע טקסטואלי.

  2. 00:18

    אז אנחנו בעצם הולכים לגלוש לאיזשהו לינק מרוחק שיש בו תמונה, להוריד אותה באופן דינמי ולהציג אותה. אז במקום TextDownloader, אנחנו רוצים שיהיה לנו ImageDownloader.

  3. 00:33

    אז בואו קודם כל נעשה איזשהו Renaming לשם TextDownloader, ונרשום ImageDownloader. בואו נעשה Refactor, ומה שעשינו זה רק שינינו את השם. אנחנו רוצים לקחת את הטקסט דאונלודר הזה, ופשוט לשנות אותו לכזה שיוכל להחזיר תמונה.

  4. 00:56

    אז דבר ראשון, אנחנו כן רוצים לקבל string, כי אנחנו רוצים לקבל את ה-URL או את ה-Link שבו יושבת תמונה. אנחנו לא רוצים לדווח שום דבר כרגע בתהליך, כי אנחנו פשוט ניגשים, מורידים את התמונה, ואנחנו רוצים רק להחזיר אותה, ולכן במקום string כאן, אנחנו רוצים להגדיר bitmap.

  5. 01:20

    אבל זה לא רק כאן שאנחנו צריכים להגדיר את ה-bitmap, כבר אנחנו רואים פה שגיעה, כי doingBackground עכשיו קיבלה הוראה להחזיר ביטמאפ. ובנוסף, אנחנו רוצים גם שה-onPostExecute תקבל אובייקט ביטמאפ, ובעצם הביטמאפ שהורדנו.

  6. 01:44

    עכשיו אנחנו צריכים לטפל בזה גם כאן. לדוגמה, ב-onSuccess, אנחנו רוצים גם כן להוריד ביטמאפ, וזה יהיה downloaded ביטמאפ. בואו נרשום כאן downloaded bitmap.

  7. 02:03

    במידע ויש שגיאה, אנחנו עדיין רוצים לדווח את ה-status code ואת ה-ero message, on about to begin, לא מדווחת שום דבר, אלא רק את העובדה שאנחנו הולכים להתחיל את התהליך.

  8. 02:18

    את זה אנחנו גם צריכים לשנות, ל-downloaded bitmap. ויש לנו עכשיו את הקוד עצמו שאנחנו צריכים לשנות. אז בואו ניגש מלמעלה למטה ונראה מה הדברים הדרושים לשינוי בשביל להביא תמונה ולא טקסט.

  9. 02:39

    אז המחלקה נקראת image downloader ואנחנו רוצים את ה-interface callbacks, status code, error message, זה בסדר. הקונסטרקטור מקבל איזשהו אובייקט שממש את ה-Listener, זה כנראה יהיה ה-main activity ומעדכן את המשתנה הגלובלי.

  10. 02:58

    בפרה-Execute אנחנו רק אומרים שאנחנו הולכים להתחיל וכך מי שמאזין לנו יוכל פשוט להציג לדוגמה איזה שהוא דיאלוג כזה שהיוזר יראה שמשהו מתרחש. on ב-do in background קיבלנו את ה-string, ואנחנו כן רוצים http url connection, אבל אנחנו לא צריכים את שלושת אלה.

  11. 03:25

    מה שאנחנו צריכים זה רק input stream, מפני שה-input stream reader וה-buffered reader נועדו בכדי שיהיה לנו יותר קל לקרוא שורות-שורות, read line, read line. אבל אנחנו לא קוראים פה מידע טקסטואלי ולכן אין לנו כאן שורות שורות, אז את זה אנחנו מוחקים.

  12. 03:47

    כן, יש לנו try, יש לנו פה קבלה של ה-URL שנשלח אלינו מה-Activity, הוצאת ה-URL לאו-בי-אק-URL, התחברות לקישור המרוחק ל-URL על ידי Open Connection, ומה שאנחנו רוצים זה לקבל את הסטטוס קוד לראות מה בעצם מבחינת הסטטוס האם הכל בסדר וקיבלנו את התמונה או שיש איזושהי שגיאה אחרת אם הכל בסדר, בוא נתחיל כזה דבר

  13. 04:19

    אם לא בסדר, אם אנחנו לא קיבלנו HTTP סטטוס אוקיי אז אנחנו רוצים להדכן את השגיאה getResponseMessage ולהחזיר null ואז שימו לב שהפונקציה onPostExecut תקבל null ותבדוק אם אנחנו null אז אנחנו מעלים את ה-onError אם אנחנו לא null הגיעה תמונה

  14. 04:43

    חוקית ואנחנו שולחים את התמונה בואו נמשיך ואנחנו נמצאים פה אז inputStream מקבל את ה-inputStream ויש לנו ערוץ תקשורת ל-response שמוחזר מהלינק שגלשנו אליו וכל מה שאנחנו צריכים לעשות בשלב הזה אנחנו לא צריכים לבנות אובייקט input stream reader או buffered reader ולרוץ על ידי string builder

  15. 05:14

    אנחנו לא עושים את כל אלה, כל מה שאנחנו עושים זה רק מחזירים bitmap factory ויש לנו decode stream שמקבל את ה-input stream ואם אנחנו נרחף מעליו, אנחנו נראה שהוא הופך את הסטרים לביטמפ פשוט קורא את הדאטה שיש בערוץ תקשורת הזה, בסטרים הזה ויודע שיש שם איזשהו ביטמפ, הופך את זה לביטמפ ואנחנו מחזירים את הביטמפ הזה מה יש לנו כאן?

  16. 05:48

    אם יש אקספשן, שום בעיה נעדכן את האקספשן בארור מסג' ונחזיר נל סגירות, רק שני החבר'ה אלה צריכים להיסגר

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Google Finance API

ההרצאה הבאה: Download Image in Packets

הרצאות קשורות מקורסים אחרים

  • Publish Image
  • Glance image service
  • הוספת דרייברים ל-IMAGE
  • Hiding UIImages in a UIStackView and image Alpha for toggling On Off

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון