View Full Version : روش گرفتن کوئری از فایل strings.xml در برنامه نویسی اندروید
masoud_dmp
دوشنبه 02 مهر 1397, 19:52 عصر
با سلام خدمت دوستان عزیزم
سوال من اینه که چطور میشه یک کوئری ساده (فیلتر) از داده های داخل فایل strings.xml گرفت ؟
برای مثال فایل زیر را در نظر بگیرید :
String city;
String msource;
int img;
String[] Subjects1 = new String[716];
String[] Subjects2 = new String[716];
Integer[] imageId = new Integer[716];
for (int x = 1; x < 716 + 1; x = x + 1)
{
String this_subjectcity = "subject_city_" + String.valueOf(x);
int resIDcity = getResources().getIdentifier(this_subjectcity, "string", getPackageName());
city = getResources().getString(resIDcity);
String this_subject1 = "subject_" + String.valueOf(x);
int resID1 = getResources().getIdentifier(this_subject1, "string", getPackageName());
msource = getResources().getString(resID1);
String this_imageId = "imgm" + String.valueOf(x);
img = getResources().getIdentifier(this_imageId, "drawable", getPackageName());
if (city == "تهران")
{
Subjects1[x-1] = msource;
Subjects2[x-1] = city;
imageId[x-1] = img;
}
}
من در این مثال خواستم string value هایی رو که subject_city برابر با "تهران" هست رو داخل لیست ویو نمایش بده
ولی متاسفانه برنامه force close میشه
البته این رو بگم که خود حلقه مشکل نداره و خروجی میده ، فقط زمانی که از شرط if استفاده میکنم force close میشه
ممنون میشم در این بابت من رو راهنمایی کنید.
masoud_dmp
چهارشنبه 04 مهر 1397, 13:42 عصر
دوستان کسی نیست مشکل من رو حل کنه ؟؟؟
Nevercom
پنج شنبه 05 مهر 1397, 08:08 صبح
اولین چیزی که باید بهش توجه کنید اینه که برای چک کردن برابری دو تا String باید از متد equals استفاده کنید:
if (city.equals("tehran")){...}
farhad_shiri_ex
پنج شنبه 05 مهر 1397, 10:24 صبح
با سلام خدمت دوستان عزیزم
سوال من اینه که چطور میشه یک کوئری ساده (فیلتر) از داده های داخل فایل strings.xml گرفت ؟
برای مثال فایل زیر را در نظر بگیرید :
String city;
String msource;
int img;
String[] Subjects1 = new String[716];
String[] Subjects2 = new String[716];
Integer[] imageId = new Integer[716];
for (int x = 1; x < 716 + 1; x = x + 1)
{
String this_subjectcity = "subject_city_" + String.valueOf(x);
int resIDcity = getResources().getIdentifier(this_subjectcity, "string", getPackageName());
city = getResources().getString(resIDcity);
String this_subject1 = "subject_" + String.valueOf(x);
int resID1 = getResources().getIdentifier(this_subject1, "string", getPackageName());
msource = getResources().getString(resID1);
String this_imageId = "imgm" + String.valueOf(x);
img = getResources().getIdentifier(this_imageId, "drawable", getPackageName());
if (city == "تهران")
{
Subjects1[x-1] = msource;
Subjects2[x-1] = city;
imageId[x-1] = img;
}
}
من در این مثال خواستم string value هایی رو که subject_city برابر با "تهران" هست رو داخل لیست ویو نمایش بده
ولی متاسفانه برنامه force close میشه
البته این رو بگم که خود حلقه مشکل نداره و خروجی میده ، فقط زمانی که از شرط if استفاده میکنم force close میشه
ممنون میشم در این بابت من رو راهنمایی کنید.
و همینطور می تونید از متد compare هم استفاده کنید. در کل در زبان جاوا برای مقایسه دو رشته از نوع String حتما باید از متد equals , compare استفاده کنید نمی تونید از عملگر == استفاده کنید چون در زبان جاوا operator over loading پشتیبانی نمیشه!
if (city.comapre("تهران"))
masoud_dmp
جمعه 06 مهر 1397, 00:38 صبح
اولین چیزی که باید بهش توجه کنید اینه که برای چک کردن برابری دو تا String باید از متد equals استفاده کنید:
if (city.equals("tehran")){...}
تا اینجای کار ازتون ممنونم مشکلم برطرف شد
مشکل بعدیم اینه که چیکار کنم تا رکورد های بعدی در لیست ویو نمایش داده نشه
با کد زیر مشکلم برطرف نشد
if (city.equals("تهران"))
{
Subjects1[x-1] = msource;
Subjects2[x-1] = city;
imageId[x-1] = img;
}
else
{
Subjects1[x-1] = "";
Subjects2[x-1] = "";
imageId[x-1] = 0;
}
masoud_dmp
جمعه 06 مهر 1397, 00:39 صبح
اگه واضح نیست کد کاملش رو بزارم
farhad_shiri_ex
شنبه 07 مهر 1397, 08:12 صبح
تا اینجای کار ازتون ممنونم مشکلم برطرف شد
مشکل بعدیم اینه که چیکار کنم تا رکورد های بعدی در لیست ویو نمایش داده نشه
با کد زیر مشکلم برطرف نشد
if (city.equals("تهران"))
{
Subjects1[x-1] = msource;
Subjects2[x-1] = city;
imageId[x-1] = img;
}
else
{
Subjects1[x-1] = "";
Subjects2[x-1] = "";
imageId[x-1] = 0;
}
اگر منظورتون این هست که فقط عبارت مورد جستجو در لیست فیلتر شود که خوب این کاری که کردید درست نیست که هربار بقیه رکورد ها را خالی کنید سربار زیادی داره.
به نظرم بهتر هست که یا دریک دیالوگ و یا یک اکتیویتی جزئیات مورد جستجو را نمایش بدید
ویا اگر اصرار به نمایش در لیست دارید باید کرسری که فقط مورد فیلتر شده در آن هست را در آداپتری که به لیست ویو متصل کرده اید به روز کنید و لیست ویو را invalidate کنید تا فقط موردجستجو شده را نمایش دهد. در کل باید یک گزینه (نمایش همه) هم برای لیست ویو تدارک ببنید که در صورت لزوم بتوان مجددا کل لیست را نمایش داد.
البته این نظر من بود دوستان حرفه ای تر مثل Nevercom در طراحی UI/UX با تجربه ترند می تونید از ایشون هم بخواهید.
masoud_dmp
دوشنبه 09 مهر 1397, 00:25 صبح
سلام
ممنون میشم اگه یه نمونه کد برام بزارید (در خصوص فیلتر کردن)
آخه حقیقتش تو این ضمینه من یه مقدار تازه کار هستم :لبخندساده:
masoud_dmp
دوشنبه 09 مهر 1397, 00:47 صبح
کد کامل جاوای این فایل :
package com.mws.dmp.irangardi;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import android.app.*;
import android.content.*;
import android.widget.*;
import android.view.*;
import android.widget.AdapterView.*;
import android.graphics.*;
public class subject extends Activity {
public ListView lv;
public int Subjects_total_number;
public String[] Subjects;
@Override
protected void onCreate(Bundle savedInstanceState)
{
//Remove notification bar
getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowM anager.LayoutParams.FLAG_FULLSCREEN );
//Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE) ;
super.onCreate(savedInstanceState);
setContentView(R.layout.subject);
// change subject
// Bundle extras = getIntent().getExtras();
// String myVariable_2 = extras.getString("subject_key");
//
final Typeface font = Typeface.createFromAsset(getAssets(), "fonts/Koodak.ttf");
TextView txt = (TextView) findViewById(R.id.subject_textView);
txt.setTypeface(font);
String city;
String msource;
int img;
String[] Subjects1 = new String[716];
String[] Subjects2 = new String[716];
Integer[] imageId = new Integer[716];
for (int x = 1; x < 716 + 1; x = x + 1)
{
String this_subjectcity = "subject_city_" + String.valueOf(x);
int resIDcity = getResources().getIdentifier(this_subjectcity, "string", getPackageName());
city = getResources().getString(resIDcity);
String this_subject1 = "subject_" + String.valueOf(x);
int resID1 = getResources().getIdentifier(this_subject1, "string", getPackageName());
msource = getResources().getString(resID1);
String this_imageId = "imgm" + String.valueOf(x);
img = getResources().getIdentifier(this_imageId, "drawable", getPackageName());
if (city.equals("تهران"))
{
Subjects1[x-1] = msource;
Subjects2[x-1] = city;
imageId[x-1] = img;
}
else
{
Subjects1[x-1] = "";
Subjects2[x-1] = "";
imageId[x-1] = 0;
}
}
CustomList adapter = new CustomList(subject.this, Subjects1, Subjects2, imageId);
ListView list=(ListView)findViewById(R.id.list_view1);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
Intent i = new Intent(getApplicationContext(), source.class);
String Subject_number = String.valueOf(position+1);
i.putExtra("subject_number", Subject_number);
startActivity(i);
}
});
}
}
و همینطور کد مربوط به فایل CustomList.java
package com.mws.dmp.irangardi;
import android.app.Activity;
import android.content.res.AssetManager;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.content.*;
import android.view.animation.*;
public class CustomList extends ArrayAdapter<String>{
//Typeface معرفی کلاس
private Typeface tf;
private final Activity context;
//معرفی نام و تصاویر از اکتیوتی
private final String[] subject_name1;
private final String[] subject_name2;
private final Integer[] imageId;
public CustomList(Activity context,String[] subject_name1,String[] subject_name2,Integer[] imageId) {
super(context, R.layout.list_file, subject_name1);
this.context = context;
this.subject_name1 = subject_name1;
this.subject_name2 = subject_name2;
this.imageId = imageId;
//فرواخوانی فونت از پوشه فونت
}
// private AssetManager getAssets()
// {
// // TODO: Implement this method
// return null;
// }
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.list_file, null, true);
TextView txtTitle1 = (TextView) rowView.findViewById(R.id.listfileTextView_text);
TextView txtTitle2 = (TextView) rowView.findViewById(R.id.listfileTextViewCITY);
//افزودن فونت به تکست ویو
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.slide_in_right2);
rowView.startAnimation(animation);
ImageView imageView = (ImageView) rowView.findViewById(R.id.listfileImageView1);
txtTitle1.setText(subject_name1[position]);
txtTitle2.setText(subject_name2[position]);
txtTitle1.setTypeface(this.tf = Typeface.createFromAsset(context.getAssets(),"fonts/Koodak.ttf"));
imageView.setImageResource(imageId[position]);
return rowView;
}}
اگه تغییراتی تو این دو فایل بابت عدم نمایش ردیفهای لیست ویو لازم هست ممنون میشم بگید
masoud_dmp
چهارشنبه 11 مهر 1397, 00:21 صبح
دوستان من رو کمک شما حساب باز کردم
بد جوری گیر افتادم ممنون میشم اگه راهنمایی کنید
اگه هر سوالی در این خصوص دارید بگید تا بلکه مشکل من برطرف بشه
اصل قضیه اینه که من رو یه اپلیکیشن ایرانگردی کار میکنم
میخوام تمام استان ها رو لیست کنم وقتی رو هر استان کلیک میکنید مکان های گردشگری مربوط به اون استان رو نشون بده
فقط همین
masoud_dmp
جمعه 20 مهر 1397, 10:42 صبح
طبق اون چیزی که من جستجو کردم ظاهرا باید داده های xml رو parse (تجزیه) کرد ولی چجوری نمیدونم ؟...
samiasoft
چهارشنبه 25 مهر 1397, 21:40 عصر
دوستان من رو کمک شما حساب باز کردم
بد جوری گیر افتادم ممنون میشم اگه راهنمایی کنید
اگه هر سوالی در این خصوص دارید بگید تا بلکه مشکل من برطرف بشه
اصل قضیه اینه که من رو یه اپلیکیشن ایرانگردی کار میکنم
میخوام تمام استان ها رو لیست کنم وقتی رو هر استان کلیک میکنید مکان های گردشگری مربوط به اون استان رو نشون بده
فقط همین
شما چرا خودتونو درگیر xml کردید ؟ اینارو داخل دیتابیس اسکیولایت بریزید راحت تر کوئری بزنید...
چنانچه این اطلاعات روبصورت انلاین از rss که بصورت xml هست دریافت کردید اموزشش داخل سایت لرن فایلز هست با اون پیش برید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.