דילוג לתוכן
  • חוקי הפורום
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
לוגו מותג
  1. דף הבית
  2. אנדרואיד - כללי
  3. בניית ופיתוח אפליקציות
  4. עזרה הדדית - בניית ופיתוח אפליקציות
  5. בקשת מידע | קבלת json מREST API בJetpack Compose למשתנים

בקשת מידע | קבלת json מREST API בJetpack Compose למשתנים

מתוזמן נעוץ נעול הועבר עזרה הדדית - בניית ופיתוח אפליקציות
9 פוסטים 3 כותבים 225 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • אבייא מנותק
    אבייא מנותק
    אביי
    כתב ב נערך לאחרונה על ידי אביי
    #1

    אני מתכנת פעם ראשונה אפליקציית Jetpack Compose עבור אנדרואיד, ויש לי מסך שבו אני מציג למשתמש כפתורים שנוצרים מתוך רשימה, ככה

            val buttonLabels = arrayOf("קפה נמס", "קפה שחור", "טסטר צ'ויס")
            
            val buttonLabelsList = buttonLabels.toList()
            items(buttonLabelsList.chunked(2), itemContent = { buttonPair ->
                Row(
                    modifier = Modifier
                        .fillMaxWidth()
                        .height(120.dp),
                    horizontalArrangement = Arrangement.spacedBy(16.dp),
                ) {
                    for (label in buttonPair) {
                        Button(
                            onClick = {
                                val amountItem = "2"
    
                                bthText = label
                                bthAmount = amountItem
                                isButtonPressed = true
                            },
                            modifier = Modifier
                                .weight(1f)
                                .fillMaxHeight()
                                .padding(vertical = 20.dp, horizontal = 20.dp),
                            colors = ButtonDefaults.buttonColors(
                                contentColor = Color(0xFFE3F2FD)
                            ),
                            shape = MaterialTheme.shapes.medium
                        ) {
                            Text(
                                text = label,
                                style = MaterialTheme.typography.bodyLarge
                                    .copy(
                                        fontFamily = FontFamily(Font(R.font.rubik_regular, FontWeight.Normal)),
                                        fontWeight = FontWeight.Normal,
                                        fontSize = 24.sp,
    
                                    ),
                                textAlign = TextAlign.Center
                            )
                        }
                    }
                }
            })
    

    ואני רוצה שהרשימה תתקבל מכתובת אינטרנט בREST API שיישלח json עם תווית, איידי, ופרטים נוספים עבור כל כפתור. אני רוצה שהנתונים יתקבלו בעת פתיחת האפליקציה ולא בכל פתיחה של המסך הספציפי/יישמרו באפליקציה עד לריענון מכפתור ייעודי (אולי עדיף)

    הענין הוא שאינני מצליח לקבל את הנתונים מקריאת הרשת.

    אני מבצע את זה עם Retrofit וקריאת הרשת מתבצעת בהצלחה, והנתונים מגיעים, אבל אינני מצליח לאכסן אותם במשתנה/להשתמש בהם כמקור לbuttonLabels.

    בכוונה אני לא מביא את הקוד לקריאות הרשת עצמם, כי זה עובד מעולה, וחסר לי בהבנת הלוגיקה של הקוטלין + Jetpack Compose עצמה (לענ"ד)

    אשמח להסבר/דוגמה על המימוש (ViewModel) או אפילו להדרכה ממי שמבין בקוטלין/Jetpack Compose

    ניתן ליצור עימי קשר 8140hp+mt@gmail.com

    זונדלז תגובה 1 תגובה אחרונה
    0
    • זונדלז מנותק
      זונדלז מנותק
      זונדל מדריכים
      השיב לאביי ב נערך לאחרונה על ידי
      #2

      @אביי בשלב שאתה מקבל את json באיזה סוג משתמש אתה מנסה לשמור אותו ואיך אתה מנסה לגשת לאותו סוג משתנה

      https://www.buymeacoffee.com/zundel

      אבייא תגובה 1 תגובה אחרונה
      1
      • אבייא מנותק
        אבייא מנותק
        אביי
        השיב לזונדל ב נערך לאחרונה על ידי אביי
        #3

        @זונדל הרבה לפני... מחקתי את הנסיונות נלך על נקי.

        זה הViewModel

        package com.abaye.abayecoffee.network
        
        import androidx.compose.runtime.mutableStateOf
        import androidx.lifecycle.ViewModel
        import androidx.lifecycle.viewModelScope
        import com.abaye.abayecoffee.ApiService
        import kotlinx.coroutines.Dispatchers
        import kotlinx.coroutines.launch
        import okhttp3.OkHttpClient
        import okhttp3.logging.HttpLoggingInterceptor
        import retrofit2.Retrofit
        import retrofit2.converter.gson.GsonConverterFactory
        
        class MyViewModel : ViewModel() {
        
            private val httpClient = OkHttpClient.Builder()
                .addInterceptor(HttpLoggingInterceptor().apply {
                    level = HttpLoggingInterceptor.Level.BODY
                })
                .build()
        
            private val retrofit = Retrofit.Builder()
                .baseUrl("https://abaye.co/")
                .addConverterFactory(GsonConverterFactory.create())
                .client(httpClient)
                .build()
        
        
            private val apiService = retrofit.create(ApiService::class.java)
        
            fun getBth(s: String): String {
                var responseBodyString = ""
                viewModelScope.launch(Dispatchers.IO) {
                    try {
                        val response = apiService.getBth(s)
        
                        responseBodyString = response.body()?.string().toString()
                        println(responseBodyString)
                    } catch (e: Exception) {
                        e.printStackTrace()
                    }
                }
                return responseBodyString
            }
        }
        

        והAPI סרוויס

        package com.abaye.abayecoffee
        
        import okhttp3.ResponseBody
        import retrofit2.Response
        import retrofit2.http.Field
        import retrofit2.http.FormUrlEncoded
        import retrofit2.http.POST
        
        
        interface ApiService {
            @FormUrlEncoded
        
            @POST("api/getBth")
            suspend fun getBth(
                @Field("s") username: String,
            ): Response<ResponseBody>
        }
        

        הprintln(responseBodyString) אכן מדפיס את התוכן, אבלכיצד אני מקבל את זה לתוך הלbuttonLabels (כמובן שאצטרך לנתח את הjson ולשרשר רק את הנתונים הרצויים)

        ניתן ליצור עימי קשר 8140hp+mt@gmail.com

        זונדלז תגובה 1 תגובה אחרונה
        0
        • זונדלז מנותק
          זונדלז מנותק
          זונדל מדריכים
          השיב לאביי ב נערך לאחרונה על ידי
          #4

          @אביי אתה צריך בקלאס של יצירת הכפתורים להשתמש ליצור משתנה

          val viewModel: MyViewModel = getViewModel()
          

          ואז אתה שאתה קורא לפונקציה

          for (label in buttonPair) {
              Button(
                  onClick = {
                      val amountItem = "2"
                      bthText = label
                      bthAmount = amountItem
                      isButtonPressed = true
          
                      // קריאה לפונקציה מה-ViewModel
                      viewModel.getBth(label)
                  },
                  modifier = Modifier
                      .weight(1f)
                      .fillMaxHeight()
                      .padding(vertical = 20.dp, horizontal = 20.dp),
                  colors = ButtonDefaults.buttonColors(
                      contentColor = Color(0xFFE3F2FD)
                  ),
                  shape = MaterialTheme.shapes.medium
              ) {
                  Text(
                      text = label,
                      style = MaterialTheme.typography.bodyLarge
                          .copy(
                              fontFamily = FontFamily(Font(R.font.rubik_regular, FontWeight.Normal)),
                              fontWeight = FontWeight.Normal,
                              fontSize = 24.sp,
                          ),
                      textAlign = TextAlign.Center
                  )
              }
          }
          

          נ.ב. נעזרתי בgpt מכיון שאין לי נסיון עם Jetpack אני יותר java-xml

          https://www.buymeacoffee.com/zundel

          אבייא תגובה 1 תגובה אחרונה
          0
          • אבייא מנותק
            אבייא מנותק
            אביי
            השיב לזונדל ב נערך לאחרונה על ידי אביי
            #5

            @זונדל כתב בבקשת מידע | קבלת json מREST API בJetpack Compose למשתנים:

            נ.ב. נעזרתי בgpt מכיון שאין לי נסיון עם Jetpack אני יותר java-xml

            רואים, זה בכלל לא מה שהתכוונתי... לקרוא לפונקציה זה לא הבעיה שלי... השאלה שלי היא כיצד אני מקבל את הנתונים שמתקבלים בViewModel (מה שמודפס בprintln(responseBodyString)) לתוך משתנה כלשהו..

            אולי @לא-מתייאש יוכל לעזור, זכור לי שציינת פעם שאתה מתכנת בJetpack Compose

            ניתן ליצור עימי קשר 8140hp+mt@gmail.com

            לא-מתייאשל תגובה 1 תגובה אחרונה
            0
            • לא-מתייאשל מנותק
              לא-מתייאשל מנותק
              לא-מתייאש
              השיב לאביי ב נערך לאחרונה על ידי
              #6

              @אביי כתב בבקשת מידע | קבלת json מREST API בJetpack Compose למשתנים:

              @זונדל כתב בבקשת מידע | קבלת json מREST API בJetpack Compose למשתנים:

              נ.ב. נעזרתי בgpt מכיון שאין לי נסיון עם Jetpack אני יותר java-xml

              רואים, זה בכלל לא מה שהתכוונתי... לקרוא לפונקציה זה לא הבעיה שלי... השאלה שלי היא כיצד אני מקבל את הנתונים שמתקבלים בViewModel (מה שמודפס בprintln(responseBodyString)) לתוך משתנה כלשהו..

              אולי @לא-מתייאש יוכל לעזור, זכור לי שציינת פעם שאתה מתכנת בJetpack Compose

              מקראיה שטחית אני רואה שאתה לא מכיר את קוטלין, ולא יודע מה זה VIEWMODEL, הVIEWMODEL שלך בכלל לא משתמש כVIEWMODEL, אוליי כREPOSITORY אבל זה גם לא הצורה.
              אתה צריך ללמוד קודם כל את העקרונות של קוטלין טוב טוב, אח"כ תוכל לעבור לJETPACK COMPOSE, וכשתשלוט על JETPACK COMPOSE, תוכל ללמוד את הMVVM. (אני גם לא רואה מודל במה שללחת)

              בטמפלייט שלי (אף שזה למחשבים דרך הJVM) תוכל לראות מה זה VIEWMODEL, וגם איך מנהלים את הSTATE (שזה הבעייה שלך)
              https://github.com/kdroidFilter/compose-desktop
              אני גם מקבל נתונים דרך API.

              https://kdroidfilter.github.io/blog

              אבייא תגובה 1 תגובה אחרונה
              1
              • אבייא מנותק
                אבייא מנותק
                אביי
                השיב ללא-מתייאש ב נערך לאחרונה על ידי
                #7

                @לא-מתייאש כתב בבקשת מידע | קבלת json מREST API בJetpack Compose למשתנים:

                מקראיה שטחית אני רואה שאתה לא מכיר את קוטלין, ולא יודע מה זה VIEWMODEL, הVIEWMODEL שלך בכלל לא משתמש כVIEWMODEL, אוליי כREPOSITORY אבל זה גם לא הצורה.

                אכן,

                אתה צריך ללמוד קודם כל את העקרונות של קוטלין טוב טוב, אח"כ תוכל לעבור לJETPACK COMPOSE

                ואכן

                עדיין לא מצאתי מדריך נורמלי בעברית, ועם המדריכים (האולי מצויינים) של גוגל אני קצת מתקשה בגלל השפה..

                אעיין בטמפלייט שלך בעז"ה, תודה

                ניתן ליצור עימי קשר 8140hp+mt@gmail.com

                לא-מתייאשל תגובה 1 תגובה אחרונה
                0
                • לא-מתייאשל מנותק
                  לא-מתייאשל מנותק
                  לא-מתייאש
                  השיב לאביי ב נערך לאחרונה על ידי
                  #8

                  @אביי כתב בבקשת מידע | קבלת json מREST API בJetpack Compose למשתנים:

                  @לא-מתייאש כתב בבקשת מידע | קבלת json מREST API בJetpack Compose למשתנים:

                  מקראיה שטחית אני רואה שאתה לא מכיר את קוטלין, ולא יודע מה זה VIEWMODEL, הVIEWMODEL שלך בכלל לא משתמש כVIEWMODEL, אוליי כREPOSITORY אבל זה גם לא הצורה.

                  אכן,

                  אתה צריך ללמוד קודם כל את העקרונות של קוטלין טוב טוב, אח"כ תוכל לעבור לJETPACK COMPOSE

                  ואכן

                  עדיין לא מצאתי מדריך נורמלי בעברית, ועם המדריכים (האולי מצויינים) של גוגל אני קצת מתקשה בגלל השפה..

                  אעיין בטמפלייט שלך בעז"ה, תודה

                  אם רק התחלת, אוליי תוודא שקוטלין עם JETPACK COMPOSE, זה מה שהכי מתאים לפרוייקט שלך, ושיש לך צורך בלבנות אפליקצייה נטיבית.
                  שפות כמו DART עם FLUTTER מאפשרות לך לבנות אפליקציות גם כן (שנראות נטיביות) אבל בהרבה פחות סיבוכים.

                  https://kdroidfilter.github.io/blog

                  אבייא תגובה 1 תגובה אחרונה
                  1
                  • אבייא מנותק
                    אבייא מנותק
                    אביי
                    השיב ללא-מתייאש ב נערך לאחרונה על ידי
                    #9

                    @לא-מתייאש כתב בבקשת מידע | קבלת json מREST API בJetpack Compose למשתנים:

                    שפות כמו DART עם FLUTTER מאפשרות לך לבנות אפליקציות גם כן (שנראות נטיביות) אבל בהרבה פחות סיבוכים.

                    ידוע.

                    זה בתכנון לשלב הבא, כעת אני רוצה ללמוד את עניין הJetpack Compose לכן בחרתי לעשות את זה דווקא עם זה..

                    ניתן ליצור עימי קשר 8140hp+mt@gmail.com

                    תגובה 1 תגובה אחרונה
                    0

                    • התחברות

                    • אין לך חשבון עדיין? הרשמה

                    • התחברו או הירשמו כדי לחפש.
                    • פוסט ראשון
                      פוסט אחרון
                    0
                    • חוקי הפורום
                    • לא נפתר
                    • משתמשים
                    • חיפוש גוגל בפורום
                    • צור קשר