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

مشکل با نمایش اطلاعات گرفته شده از sqLite database در ListView(حل شد)

amirfallahi  11 سال پیش  11 سال پیش
0 0

سلام دوستان 

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

توی StructNote ( برای من StructUser) دو تا استرینگ گذاشتم به این صورت: 

public class StructUser {
    public String userimage;
    public String username;
}

کلاس AdapterUser رو هم به این صورت تعریف کردم

public class AdapterUsers extends ArrayAdapter {
 
    public AdapterUsers(ArrayList array){
 
        super(G.context , R.layout.listrow , array);
    }
 
    private static class ViewHolder {
 
        public ImageView imguser;
        public TextView txtnameuser;
 
        public ViewHolder (View view){
 
            imguser = (ImageView)view.findViewById(R.id.imguser);
            txtnameuser = (TextView)view.findViewById(R.id.txtnameuser);
 
        }
 
        public void fill(ArrayAdapter adapter , StructUser item , int position){
 
            txtnameuser.setText(item.username);
 
            Bitmap bitmap = getBitmapFromAsset(G.context , item.userimage);
            imguser.setImageBitmap(bitmap);
        }
 
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
 
        ViewHolder holder;
        StructUser item = getItem(position);
 
        if(convertView == null)
        {
            G.layoutInflater.inflate(R.layout.listrow , parent , false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.fill(this , item , position);
        return convertView;
 
    }
 
    public static Bitmap getBitmapFromAsset(Context paramContext, String strName)
    {
        AssetManager assetManager = paramContext.getAssets();
        InputStream istr = null;
 
        try {
            istr = assetManager.open(strName);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        Bitmap bitmap = BitmapFactory.decodeStream(istr);
        return bitmap;
    }
 
}

 

 

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

 

public class ActivityShowInfo extends Activity {
 
    private LayoutInflater inflater;
    private View view;
    public ArrayList Suser = new ArrayList();
    public ArrayAdapter adapteruser;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_showinfo);
 
        adapteruser = new AdapterUsers(Suser);
 
        inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.slidingmenu,null);
 
 
        Boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE)
                .getBoolean("isFirstRun", true);
 
        if (isFirstRun) {
            startActivity(new Intent(ActivityShowInfo.this, FirstLaunch.class));
            finish();
        }
 
        // set the content view
        setContentView(R.layout.activity_showinfo);
        // configure the SlidingMenu
        SlidingMenu menu = new SlidingMenu(this);
        menu.setMode(SlidingMenu.RIGHT);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        menu.setShadowDrawable(R.drawable.shadow);
        menu.setFadeDegree(0.35f);
        menu.setBehindOffset(100);
        menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
 
        view.findViewById(R.id.LnewUser).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //open alert new user
                // G.Userdatabase.execSQL("INSERT INTO users (users_name , users_pic ) VALUES ( 'amir' , 1 )");
                G.adduser( "sss", "mard.png" , "off");
            }
        });
        ListView listuser = (ListView)view.findViewById(R.id.lstUsers);
        listuser.setAdapter(adapteruser);
 
        Cursor cursors = G.Userdatabase.rawQuery("SELECT * FROM users WHERE users_on = 'off' " , null);
 
        if(cursors != null) {
            try {
                if (cursors.getCount() > 0) {
 
                    for(int i = 0 ; i < cursors.getCount() ; i++){
                        StructUser users = new StructUser();
                        cursors.moveToNext();
                        users.username = cursors.getString(cursors.getColumnIndex("users_name"));
                        users.userimage = cursors.getString(cursors.getColumnIndex("users_pic"));
                        Suser.add(users);
                    }
 
                    adapteruser.notifyDataSetChanged();
                }
            }
            finally {
                cursors.close();
            }
        }
        menu.setMenu(view);
    }
}

 

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

01-29 16:55:19.529      439-528/? E/InputDispatcher﹕ channel '53339c50 amir.fallahi.pill.reminder/amir.fallahi.pill.reminder.ActivityShowInfo (server)' ~ Channel is unrecoverably broken and will be disposed!
01-29 17:17:18.545  30009-30009/? E/Trace﹕ error opening trace file: No such file or directory (2)
01-29 17:17:18.621  30009-30009/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at amir.fallahi.pill.reminder.AdapterUsers$ViewHolder.(AdapterUsers.java:35)
            at amir.fallahi.pill.reminder.AdapterUsers.getView(AdapterUsers.java:59)

 

 

 

چه کنم دوستان؟ لطفا کمک :)

0 0
دوستان میدونم خیلی زیاده کد ها و خوندنش یکم وقت گیره ولی خواهش میکنم یه کمکی یه سرنخی لینکی چیزی بهم بدید که بتونم مشکل رو پیدا کنم... (11 سال پیش)
0 0
فقط log رو خوندم ، خطای nullpointer داری علتشم این هست که اون مسیر یا فایل وجود نداره ... (11 سال پیش)
0 0
مرسی اسپریت جان. مشکل این بود که وجود داره فایل ولی این میگه نیست :| (11 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Hossein Kurd  11 سال پیش
0 0

دوست عزیز خط 35 AdapterUser تعیین کردی :

G.layoutInflater.inflate(R.layout.listrow , parent , false);

خب Layout Inflater ارش چیه؟ تیدیل xml به View ، و باید اون رو توی converView قرار بدی

 convertView = G.layoutInflater.inflate(R.layout.listrow , parent , false);

به خطاها دقت کن :

java.lang.NullPointerException

و دوخط پایین اون تعیین می کنه که Error از کدوم خط در کدوم کلاس ناشی می شه:

            at amir.fallahi.pill.reminder.AdapterUsers$ViewHolder.(AdapterUsers.java:35)
            at amir.fallahi.pill.reminder.AdapterUsers.getView(AdapterUsers.java:59)

در کلاس AdapterUsers.java خط 35

0 0
سلام آقا حسین. ممنونم این اینفلیتور مال همون منویی هست که اضافه کردمش. که کار میکنه و مشکلی نداره برای لیست ویو یه اینفلیتور دیگه داخل کلاس جی مثل استاد تعریف کردم. الان به نظرت من این اینفلیتور رو پاک کنم و از همون که تو کلاس جی هست استفاده کنم درست میشه به نظرت؟ (11 سال پیش)
0 0
یعنی منظورم اینه دوتا اینفلیتور لازمه یا یکی کافیه؟ و میشه دو جا ازش استفاده کرد؟ (11 سال پیش)
0 0
این که درست شد واقعا ممنونم ازت ولی این سوال دومم رو بگم آیا میشه از همون اینفلیتور داخل کلاس جی برای دو تا xml استفاده کرد؟ (11 سال پیش)
0 0
یکی کافیه ، من همزمانی LayoutInflater رو تست نکردم اما توی یک Activity اگر دوتا لیست ویو داری واسشون دوتا LayoutInflater بذار اما در صفحات جداگانه من همیشه از یک LayoutInflater بخ صورت مشترک استفاده می کنم (11 سال پیش)
+1 0
تو یه اکتیویتی هستن . یکیشون مال لیست ویو یکیشونم مال منویی که لیست ویو توش نمایش داده میشه . بعد یه سوال دیگه از همین کد ها... چرا عکسم نمایش داده نمیشه؟ داخل پوشه asset هست. اسمشم درست داخل دیتابیس ذخیره کردم. مگر اینکه اسم رو بدون پسوند لازم باشه که ذخیره کنیم (11 سال پیش)
+1 0
تست کردم بدون پسوند باید میبود ;) (11 سال پیش)
0 0
چرا عکس رو توی Drawable قرار نمی دی ؟ (11 سال پیش)
0 0
اتفاقا همین کارو کردم که درست شد. :) (11 سال پیش)

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