رفتن به مطلب
  • 0

گرفتن اطلاعات json به روش volley در یک recyclerview


mohammad_pyn

سوال

دوستان آیا کسی آموزش گرفتن اطلاعات json به روش volley در یک recyclerview در اندروید استدیو سراغ داره بهم بده ؟؟؟

اگه امکانش هست دوستان مدیر یه آموزش تصویری در این مورد بذارن ممنون میشم چون واقعا آموزش کاملی در این مورد وجود نداره

ممنون

لینک ارسال
به اشتراک گذاری در سایت های دیگر

10 پاسخ به این سوال تاکنون داده شده است

ارسال های توصیه شده

سلام

 

اگه به این شکل فرض کنیم :

[
    {
        "name": "Person 1",
        "age": 30
    },
    {
        "name": "Person 2",
        "age": 20
    },
    {
        "name": "Person 3",
        "age": 40
    }
]

در کلس اداپتر و View Holder :

public class Person {
    String name;
    Integer age;

    Person() {
    }    
}


public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
    List<Person> persons;

    RVAdapter(List<Person> persons) {
        this.persons = persons;
    }

    @Override
    public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false);
        PersonViewHolder pvh = new PersonViewHolder(v);
        return pvh;
    }

    @Override
    public void onBindViewHolder(PersonViewHolder holder, int position) {
        holder.personName.setText(persons.get(position).name);
        holder.personAge.setText(String.valueOf(persons.get(position).age));
    }

    @Override
    public int getItemCount() {
        if (persons != null) {
            return persons.size();
        }
        return 0;
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    public static class PersonViewHolder extends RecyclerView.ViewHolder {
        CardView cv;
        TextView personName;
        TextView personAge;

        PersonViewHolder(View itemView) {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.cv);
            personName = (TextView) itemView.findViewById(R.id.person_name);
            personAge = (TextView) itemView.findViewById(R.id.person_age);
        }
    }
}

و داخل اکتیویتی اصلی :

     ...
        RecyclerView rv = (RecyclerView)findViewById(R.id.rv);
        rv.setHasFixedSize(true);

        LinearLayoutManager llm = new LinearLayoutManager(mContext);
        rv.setLayoutManager(llm);

        final RVAdapter rvAdapter = new RVAdapter(personList);
        rv.setAdapter(rvAdapter);

        RequestQueue requestQueue = Volley.newRequestQueue(mContext);
        String url = "http://192.16.1.100/api/persons";

        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                try {
                    if (response.length() > 0) {
                        personList.clear();
                        for (int i = 0; i < response.length(); i++) {
                            JSONObject jsonObject = response.getJSONObject(i);
                            Person person = new Person();
                            if (!jsonObject.isNull("name")) {
                                person.name = jsonObject.getString("name");
                            }
                            if (!jsonObject.isNull("age")) {
                                person.age = jsonObject.getInt("age");
                            }
                            personList.add(i, person);
                        }
                        rvAdapter.notifyDataSetChanged();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // do something
            }
        });

        requestQueue.add(jsonArrayRequest);
        ...

نتیجش میشه این :

 

8S0Az.png

لینک ارسال
به اشتراک گذاری در سایت های دیگر

توی تعریف این کلاس مشکل دارم

میگه باید توی یک فایل همنام خودش باشه

public class Person {
String name;
Integer age;

Person() {
}
}

 
و واسه این کلاس هم همینو میگه
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
.
.
.
حالا من چیکار کنم دوتاش رو که نمیشه هم نام گرفت؟؟؟
من واسه تست اولی رو هم نام فایل جاوا گرفتم ولی میگه باید دومی رو از حالت پابلیک در بیارم میشه راهنمایی کنید؟
یعنی کدم به این شکل شده
public class JsonRecyclerAdapter {
    Integer id;
    String name;
    String fname;
    Integer num;

    JsonRecyclerAdapter() {
    }
}
//این خط ارور داره میگه نباید پابلیک باشه
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.MyViewHolder>{
    List<JsonRecyclerAdapter> mylist;

    RVAdapter(List<JsonRecyclerAdapter> mylist) {
        this.mylist=mylist;
    }

 

بعد تو اکتیویتی اصلی توی این قسمت از کد

 LinearLayoutManager llm = new LinearLayoutManager(mContext);
        rv.setLayoutManager(llm);

        final RVAdapter rvAdapter = new RVAdapter(personList);
        rv.setAdapter(rvAdapter);

        RequestQueue requestQueue = Volley.newRequestQueue(mContext);
        String url = "[url="http://192.16.1.100/api/persons";"]http://192.16.1.100/api/persons";[/url]

mContext , personList رو چجوری تعریف کنم؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

شما از برنامه ران بگیر و متن ارور انگلیسی رو از پنجره‌Android Monitor واسه من‌بذار

اگر متوجه نشدین سورس مینویسم :write:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

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

بنظرتون راه حل این مشکل چیه؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

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

بنظرتون راه حل این مشکل چیه؟

 

از چه طریقی اطلاعات رو به اکتیویتی بعد میفرستین ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اطلاعاتی ارسال نمیشه به اکتیویتی بعد اون دکمه فقط یه کار لینک مانند داره به اکتیویتی مورد نظر و در اون اکتیویتی از طریق کتابخونه volley به صورت جیسون اطلاعات رو میگیرم و از طریق ریسایکل به صورت لیست نشونش می دم.

ریسایکل رو که بصورت دستی مقدار دهی میکنم همون بار اول نشون میده ولی وقتی از اینترنت میخونم و مقدار دهی میکنم باید دوبار واردش بشم تا جواب بده.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

حواستون باشه بعد از اینکه اطلاعات رو گرفتین و تکمیل شد متد setAdapter رو اجرا کنید ، اگه نشد بعد این که اطلاعات رو گرفتین و کامل شد ادپتر رو notfy کنید ببینید مشکل حل میشه یا نه ،  

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

این کد اکتیویته 

.
.
.
public class ListActivity extends AppCompatActivity {
    private TextView txtResponse;
    private String jsonResponseName;
    private String jsonResponseAddress;
    private String jsonResponsPic;
    private String urlJsonArray;
    private static String TAG = ListActivity.class.getSimpleName();
    static  List<String> nameItems = new ArrayList<String>();
    static  List<String> addressItems = new ArrayList<String>();
    static  List<String> picItems = new ArrayList<String>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
       // txtResponse = (TextView) findViewById(R.id.textView10);

        //daryaft json
        makeJsonArrayRequest();
        //tarif recycler
        RecyclerView recyclerViewlist=(RecyclerView) findViewById(R.id.list);
        //tarif class adapter recyclview
        recyclerViewlist.setAdapter(new RecyclerAdapter(this,nameItems,addressItems,picItems));
        //tarif layout maneger baraye tarif noe nemayesh
        recyclerViewlist.setLayoutManager(new LinearLayoutManager(this));


    }
    private void makeJsonArrayRequest() {
        //daryaftjsonUrl
        Bundle extras = getIntent().getExtras();
        urlJsonArray=extras.getString("jsonUrl");



        JsonArrayRequest req = new JsonArrayRequest(urlJsonArray,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());

                        try {
                            // Parsing json array response
                            // loop through each json object
                            nameItems.clear();
                            addressItems.clear();
                            picItems.clear();

                            for (int i = 0; i < response.length(); i++) {
                                jsonResponseName = "";
                                jsonResponseAddress="";
                                jsonResponsPic="";
                                JSONObject person = (JSONObject) response.get(i);

                                String id = person.getString("id");
                                String name = person.getString("name");
                                String address = person.getString("address");
                                String tag = person.getString("tag");
                                String des = person.getString("des");
                                String pic = person.getString("pic");
                                // JSONObject phone = person.getJSONObject("phone");
                                // String home = phone.getString("home");
                                // String mobile = phone.getString("mobile");


                                jsonResponseName +=  name;
                                jsonResponseAddress += address;
                                jsonResponsPic += pic;

                                nameItems.add(jsonResponseName);
                                addressItems.add(jsonResponseAddress);
                                picItems.add(jsonResponsPic);


                            }
                            //txtResponse.setText(jsonResponse);
                            //for (int i=0;i<100;i++){
                               // items.add("item #"+i);
                           // }

                        } catch (JSONException e) {
                            e.printStackTrace();
                            Toast.makeText(getApplicationContext(),
                                    "Error: " + e.getMessage(),
                                    Toast.LENGTH_LONG).show();
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_SHORT).show();

            }
        });

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(req);


    }
}

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...