آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استفاده از کد json در list view (یک مشکل عجیب!)

شهریاری 2  7 سال پیش  7 سال پیش
0 0

ُسلام دوستان

راستش من یه مشکل عجیب غریب دارم

لیست ویوی من درست کار میکنه. یعنی این کد رو درست اجرا میکنه و لیست ویو نمایش داده میشه:

 

 

 

نکته دیگه اینکه وقتی از سمت سرور اطلاعات رو میگیرم، باز کد json درست دریافت میشه

ولی وقتی میخام به لیست ویو بریزمش، چیزی نشون داده نمیشه. اینم کد   : 

 

 

یعنی log هارو درست نشون میده ولی چیزی داخل listview نشون نمیده. انگار listview رو نذاشتم اصلا. خالی خالی!

 

 

+1 0
مشکل از این کد نیست پس . کد layout لیست ویو و همینطور کد آداپتر لیست ویو رو بزارید.اوش هم تو نت پد کپی کنید مرتب باشه (7 سال پیش)
+1 0
این چیزی که میگم جواب سوالت نیست. ترتیب کدهای شما استاندارد نیست. اول لیست سوره ها رو تکمیل کن. بعدش adapter رو با لیستت درست کن. listview رو setAdapter کن. در آخر notifyDataSetChanged. آخرش هم میگم از resyclerView بجای ListView استفاده کن (یکی از مزایای RecyclerView مصرف رم کمتره) (7 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
شهریاری 2  7 سال پیش
0 0

کد لیست ویو:

 

 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/lstView"/>

    </LinearLayout>

</LinearLayout>

کدهای آداپتورم هم تقریبا مثل کدهای استاد هست:

 public class AdapterSoureh extends ArrayAdapter<StructSoureh> {


    public AdapterSoureh(ArrayList<StructSoureh> array) {
        super(G.context, R.layout.name_soureh_note, array);
    }


    private static class ViewHolder {

        public TextView txtNameSoureh;
        public TextView txtNumber;
        public Button btnOpen;

        public ViewHolder(View view) {
            txtNameSoureh = (TextView) view.findViewById(R.id.txtNameSoureh);
            txtNumber = (TextView) view.findViewById(R.id.txtNumber);
            btnOpen = (Button) view.findViewById(R.id.btnOpen);
        }

        public void Fill(
                ArrayAdapter<StructSoureh> adapter, StructSoureh item, final int position) {
            txtNameSoureh.setText(item.Name);

            txtNumber.setText(Integer.toString(item.NumberAyes));
           
            btnOpen.setOnClickListener(
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            //go to next intent
                            Intent intent = new Intent(G.currentActivity, ActivitySelectSession.class);
                            intent.putExtra("POSITION", position);
                            G.currentActivity.startActivity(intent);
                        }
                    });
            //barresi kardane boodane tamaame file haaye mp3 marboot be soureh morede nazar dar sd card

            if(item.Downloaded) {
                // image downloaded = true
            } else {
                //image downloaded = false
            }

        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        StructSoureh item = getItem(position);
        if(convertView == null) {
            convertView = G.Inflater.inflate(R.layout.name_soureh_note, parent, false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.Fill(this, item, position);
        return convertView;
    }
}
0 0
خوب adapter هم مشکلی نداره ولی چون listview رو wrap_content گذاشتین شاید از اون باشه مشکل (7 سال پیش)
0 0
name_soureh_note رو هم بزارید (7 سال پیش)
پاسخ به سوال 
شهریاری 2  7 سال پیش
0 0

تشکر بابت کمکی که میکنید.

نه دوست عزیز. به جای wrap_content، مقادیر :

  <ListView
            android:layout_width="380dp"
            android:layout_height="332dp"
            android:id="@+id/lstView"/>

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

اینم کدهای name_soureh_note:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/btnOpen"
        android:layout_marginLeft="0dp"
        android:layout_weight="1" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:id="@+id/txtNumber"
        android:text="number"
        android:layout_marginLeft="32dip"
        android:layout_weight=".33" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="نام سوره"
        android:id="@+id/txtNameSoureh"
        android:layout_marginLeft="32dip"
        android:layout_weight=".33" />

</LinearLayout>

 

 

 

0 0
مشکل همینجاست به لایوت orientation ندادین و همینطور نباید هم ارتفاع و هم عرضش match_parent باشه چون کل صفحه رو میگیره . (7 سال پیش)
0 0
خب پس چرا وقتی که یه مقدار الکی میذارم (یعنی کاری به داده های دیتابیس ندارم)، درست نشون میده؟ گرچه الان من تغییراتی رو که گفتید انجام دادم ولی باز کار نکرد (7 سال پیش)
0 0
آهان من اون بالا ندیدم این مورد رو پس شاید بعد دریافت اطلاعات adapter.notifyDataSetChanged رو صدا نمیزنید (7 سال پیش)
0 0
اگه صدا نمیزدم که برای داده های الکی هم لیست ویو رو نشون نمیداد. (7 سال پیش)
پاسخ به سوال 
شهریاری 2  7 سال پیش
0 0

تغییراتی که گفتید:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
              android:orientation="horizontal">

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/btnOpen"
        android:layout_marginLeft="0dp"
        android:layout_weight="1" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:id="@+id/txtNumber"
        android:text="number"
        android:layout_marginLeft="32dip"
        android:layout_weight=".33" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="نام سوره"
        android:id="@+id/txtNameSoureh"
        android:layout_marginLeft="32dip"
        android:layout_weight=".33" />

</LinearLayout>

 

 

پاسخ به سوال 
شهریاری 2  7 سال پیش
0 0

یه سوال:

کدهای ارتباط با سرور رو من داخل یک thread میذارم.

درسته؟ تا اجرا بشه و برنامه کرش نکنه.

یعنی thread ای که مربوط به ui برنامه میشه ، داره برای خودش کار میکنه و این thread هم برای خودش میره با سرور ارتباط برقرار میکنه. درسته؟

پس چطوری میتونه به ui دسترسی داشته باشه و مقادیر رو به listview نشون بده؟

+1 0
باید از post استفاده : لینک (7 سال پیش)
پاسخ به سوال 
شهریاری 2  7 سال پیش
0 0

حل شد!!

 

وقتی که یک سری کد رو داخل Thread می نویسید اگه توی کدها کدی باشه که UI برنامه رو تغییر بده (مثلا setText برای TextView) برنامه کرش می کنه چون که فقط باید از طریق Thread اصلی UI رو تغییر بدید. به خاطر همین توی Thread هرجا کدی می خواست که UI رو تغییر بده اون کد رو داخل Handler می نویسید. مثلا:

finalTextView txt =(TextView) findViewById(R.id.txt);
finalHandler handler =newHandler();

Thread thread =newThread(newRunnable(){

@Override
publicvoid run(){
handler.post(newRunnable(){

@Override
publicvoid run(){
txt.setText("سلام");
}
});
}
});

با این کد txt.setText که توی thread نوشته شده در واقع توی Thread اصلی اجرا میشه.

باید به این نکته توجه داشته باشی که Handler رو توی thread تعریف نکنی.

+1 0
دوست عزیز دقیقا منم همین مشکل رو دارم اگر میشه یک مقدار با خود کد توضیح بدی ممنونت میشم که بفهمم مشکل از کجاست ، فقط برنامه من کرش نمیکنه ولی لیست ویو رو نشون نمیده البته زمانی که میخوام اطلاعات رو از طریق جیسون بگیرم لیست ویو رو دیگه نشون نمیده در حالت نرمال نشون میده (7 سال پیش)
0 0
سلامت باشید. بنظرم مشکل از کد جیسونی باشه که در برنامه شما دریافت میشه. بنظرم این باشه. منم یه همچین مشکلی داشتم. اخه کد جیسون مثلا درست بود ولی در سمت جاوا، ارایه مورد نظر در جیسون رو پیدا نمیکرد. در نتیجه هیچی در لیست ویو نمایش نمیداد یه بررسی بکن ببین همینه (7 سال پیش)
0 0
سلام..من به این مشکل بر خوردم و الان تقریبا یک هفته ست دارم روش کار میکنم و همه ی روش هایی رو که گفته شده رو امتحان کردم ولی باز هم لیست ویو رو خالی نشون میده.. پروژه اندروید مارکت استادو با اندروید استادیو میخام اجرا کنم که به همچین مشکلی بر خوردم..یعنی دیتا های دریافتی از سرور رو ادپت نمیکنه..نمیدونم چرا (7 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .