تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ Mehdi Abolhassani
طول کشیدن Get کردن اطلاعات
محمد باقر ملایی حل شده توسط محمد باقر ملایی

سلام وقتتون بخیر.

من یه مشکلی دارم اونم اینه که پروسه Get کردن اطلاعات و نمایش اونها تو لیست برای من 5 تا 10 ثانیه طول میکشه.
میخاستم بدونم که این اینا فقط مشکل من هست یا بقیه هم همین مشکل رو دارن؟

و اینکه من از فرگمت استفاده کردم و هر موقع از فرگمنت ادد کردن دانش آموز دکمه بک رو میزنم و میخاد برگرده به فرگمنت Main بازم تمام اون کد‌های Volley اجرا میشه و بازم همون 5 تا 10 ثانیه باید صبر کنم تا دیتاها توی لیست ست بشه.

میخاستم بدونم ایا راهی نیست که این تاخیره از بین بره؟؟

و MainActivity خیلی شلوغ شده آیا راهی نیست که این کد‌های Request  من توی یه کلاس دیگه بنویسم و یه شی از اون توی  MainActivity بسازم؟؟ (من به طور معمولی این رو امتحان کردم و نشد یعنی یه کلاس ساختم و کد‌ها رو بردم اونجا ولی عمل Get انجام نشد ولی دنبال راهه دیگه ای هستم)

مرسی از آموزش‌های خوب و مفیدتون 

سلام آقا مهدی

 

طبق جوابهای آقا پوریا (منتور دوره) که چندین بار سوالاتی از این قبیل رو پاسخ دادن من از ایشون نقل قول میکنم:))

 

- در این دوره شما استفاده از لایبراری Volleyرو یاد میگیرید ولی در مباحث بعدی مثل Rxjava و LiveData (که در سرفصل‌های آینده یادمیگیرید) سازگاری لایبراری Retrofit با بقیه ی لایبراری‌ها بیشتر است، پس بهتره که در آینده در پروژه هاتون از لایبراری Retrofit استفاده کنید به دلیل کانفیگ بهتر با لایبراری‌های دیگه..

 

- دیر رسیدن ریسپانس از سمت سرور، میتونه به دلایل مختلفی باشه ولی من همین چند دقیقه پیش چک کردم مشکلی از طرف سرور نیست، احتمالا میتونه مشکل از اینترنتتون باشه.. ولی اگه باز هم این موارد نبود لطفا کدهاتون رو قرار بدید تا دوستان بررسی کنند..

 

- برای تمیز‌تر کد نویسی در callBack‌ها و.. شما در سرفصل‌های آینده با استفاده از معماری و لایبراری‌های مرتبطش یاد میگیرید چطوری کدهاتونو به صورتی بنویسید که تمیز‌تر و توسعه پذیر‌تر باشه.. همچنین اینکه زبان کاتلین توی این امر خیلی عالیه و کمترین کد رو در بیشتر موارد خواهید نوشت.. طبق سرفصل‌ها که جلو بیاید تمامی این موارد رو یادمیگیرید..

 

 

موفق باشید

ابوالفضل رضایی ۲۵ آذر ۱۳۹۹، ۱۷:۲۹
public class MainFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_main, container, false);
    }
    @Override
    public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        AppCompatActivity activity = (AppCompatActivity) getActivity();
        Toolbar toolbar = view.findViewById(R.id.toolbar);
        ExtendedFloatingActionButton btn_fab = view.findViewById(R.id.btn_fab);
        assert activity != null;
        activity.setSupportActionBar(toolbar);
        StringRequest request = new StringRequest(Request.Method.GET, "http://expertdevelopers.ir/api/v1/experts/student"
                , new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.i("TAG", "onResponse: " + response);
                List<Student> students = new ArrayList<>();
                try {
                    JSONArray jsonArray = new JSONArray(response);
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        Student student = new Student();
                        student.setId(jsonObject.getInt("id"));
                        student.setFirstName(jsonObject.getString("first_name"));
                        student.setLastName(jsonObject.getString("last_name"));
                        student.setScore(jsonObject.getInt("score"));
                        student.setCourse(jsonObject.getString("course"));
                        students.add(student);
                    }
                    Log.i("TAG", "Students " + students);
                    RecyclerView list = view.findViewById(R.id.list_main);
                    list.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false));
                    StudentRecyclerAdapter adapter = new StudentRecyclerAdapter(students);
                    list.setAdapter(adapter);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.i("TAG", "onErrorResponse: " + error);
            }
        });
        RequestQueue requestQueue = Volley.newRequestQueue(getContext());
        requestQueue.add(request);
        btn_fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.main_frameLayout, new AddStudentFragment());
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();
            }
        });
    }
}		
Mehdi Abolhassani ۲۵ آذر ۱۳۹۹، ۱۷:۳۵

سلام و احترام

 


ممنون از ابوالفضل عزیزم درمورد قسمت اصلی سوالتون که پاسخ رو زحمت کشیدند و دادند.
دلیل اینکه در این سرفصل volley هم تدریس شده در یک سری شرکت‌ها ممکن هست هنوز از والی استفاده کنند و اگر شما در اینده شرکتی استخدام شدید از والی استفاده میکردند دچار مشکل نشوید .
اینکه فرمودین کد‌های درون mainactivity خیلی شلوغ شده اجازه بدید در سرفصل مربوطه (معماری) این موضوع رو به خوبی یادبگیرید.ضمن اینکه کد شما مشکلی نداشت و علت دیر دریافت شدن response مربوط به کد شما نیست .همینطور در اینده یاد اخواهید گرفت که که اطلاعات دریافت شده از اینترنت را کش کنید تا هنگامی که کاربر وارد اپلیکیشن شد دیتای کش شده از قبل نمایش داده شود و همزمان ریکویستی به سرور زده و دیتای جدید را دریافت و مجددا دیتای جدید را کش(جایگزین با دیتای قبلی) کنید و به کاربر نشان دهید(مثال اپلیکیشن اینستاگرام)

سالم باشید

پوریا شفیعی ۲۵ آذر ۱۳۹۹، ۱۸:۴۱

شما یه بریک پوینت بذار رو کال بکت

ببین اگر این دیر کال میشه که احتمالا هم همینه مشکل از نتت هستش

و اینکه بره تمیز‌تر شدن کدت

بهتره از رتروفیت استفاده کنی

و معماری mvvm رو هم یاد بگیری 

بهترین پاسخ
محمد باقر ملایی ۲۶ آذر ۱۳۹۹، ۱۳:۰۳