طول کشیدن Get کردن اطلاعات

پرسیده شده
فعالیت 1237 روز پیش
دیده شده 455 بار
0

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

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

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

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

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

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

فایل پیوست

Mehdi Abolhassani
Mehdi Abolhassani

25 آذر 99

1
حذف شده

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

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

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

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

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

فایل پیوست

محمد باقر ملایی

توسط

محمد باقر ملایی

26 آذر 99

2
حذف شده

سلام آقا مهدی

 

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

 

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

 

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

 

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

 

 

موفق باشید

فایل پیوست

ابوالفضل رضایی

توسط

ابوالفضل رضایی

25 آذر 99

حذف شده
سلام اقای رضایی مرسی بابت جوابتون خیلی بهم کمک کرد من کد MainActivity رو میذارم اگر تونستید یه چکش کنید
Mehdi Abolhassani

25 آذر 99

0
حذف شده
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

توسط

Mehdi Abolhassani

25 آذر 99

2
حذف شده

سلام و احترام

 


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

سالم باشید

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

25 آذر 99