ارتباط با سرور و گرفتن اطلاعات به وسیله جیسون
با سلام
من از پروژه Notes استاد استفاده کردم. میخوام برای یه صفحه خبر هم تیتر خبر هم عکس خبر هم متن اصلی خبر رو بگیرم.
توی لاگ اطلاعات رو از وب میگیرم ولی برنامم همون موقع هنگ میکنه!! وقتی چک کردم میبینم به Adapter خطا میگیره. بعد هم فهمیدم که متد getView در کلاس AdapterNote اتفاق نمیفنه و لیست ویو رو پر نمیکنه.
این کد کلاس customAdapter منه :
public class CustomListAdapter extends ArrayAdapter<News>{
public CustomListAdapter(ArrayList<News> array) {
super(G.context, R.layout.layout_row, array);
}
private static class ViewHolder {
public ViewGroup layoutNews;
public TextView txtTitle;
public TextView txtDescription;
public ImageView imgNews;
public ViewHolder(View view) {
txtTitle = (TextView) view.findViewById(R.id.textViewTitr);
txtDescription = (TextView) view.findViewById(R.id.textViewMatn);
layoutNews = (ViewGroup) view.findViewById(R.id.layoutNews);
imgNews = (ImageView) view.findViewById(R.id.imageViewNews);
}
public void fill(final ArrayAdapter<News> adapter, final News item, final int position) {
txtTitle.setText(item.NewsTitr);
txtDescription.setText(item.NewsText);
Uri image =Uri.parse(item.NewsLogo);
imgNews.setImageURI(image);
final News id = new News();
layoutNews.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(G.currentActivity, ActivityNews.class);
intent.putExtra("id_news", id.NewsId);
G.currentActivity.startActivity(intent);
}
});
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
News item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.layout_row, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
اینم کد وب سرویسم :
public class WebService {
public static void insert(ArrayList<NameValuePair> params) {
Connect.readUrl("http://192.168.0.1/");
}
public static void update(ArrayList<NameValuePair> params) {
Connect.readUrl("http://192.168.0.1/");
}
public static void remove(ArrayList<NameValuePair> params) {
Connect.readUrl("http://192.168.0.1/");
}
public static void read() {
String result = Connect.readUrl("http://192.168.0.1/");
if (result != null) {
try {
G.tasks.clear();
JSONArray tasks = new JSONArray(result);
for (int i = 0; i < tasks.length(); i++) {
JSONObject object = tasks.getJSONObject(i);
News task = new News();
task.NewsId = Integer.parseInt(object.getString("NewsId"));
task.NewsTitr = object.getString("NewsTitle");
task.NewsText = object.getString("NewsText");
task.NewsLogo = object.getString("NewsPic");
Log.i("id : ", task.NewsTitr );
G.tasks.add(task);
}
}
catch (JSONException e) {
e.printStackTrace();
}
}
}
}
ا
اینم کد کلاس اصلیم :
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.layout_news, null);
// ArrayList<String> adapter = new CustomListAdapter(getActivity(), image_id, Titr, Main);
// ArrayAdapter<News> arrayAdapter = new ArrayAdapter<News>(G.currentActivity, R.layout.layout_row, G.tasks);
listView = (ListView) layout.findViewById(R.id.listView);
adapter = new CustomListAdapter(G.tasks);
listView.setAdapter(adapter);
WebService.read();
adapter.notifyDataSetChanged();
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View selecteRow, int arg2, long arg3) {
// TODO Auto-generated method stub
String text = ((TextView) selecteRow).getText().toString();
Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
startActivity(new Intent(getActivity(),ActivityNews.class));
}
});
// Restore previous state (including selected item index and scroll position)
if(state != null) {
Log.d("save : ", "trying to restore listview state..");
listView.onRestoreInstanceState(state);
}
// new GetContacts().execute();
return layout;
}
کسی که نیست جواب بده ولی جوری که توی انجمن سرچ کردم و تا حدودی متوجه شدم باید از ترد استفاده کنم حالا سوالم اینجاست که کجای کدم باید از ترد استفاده کنم توی آموزش استاد که اشاره ای نشد.
باید کدهای اتصال به سرورم رو درون ترد بذارم یا کدهای دریافت جیسونم رو..
کسی هست راهنمایی کنه !؟
Thread thread =newThread(newRunnable(){
@Override
publicvoid run(){
while(true){
try{
Thread.sleep(3000);
//دستورات مورد نظر
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
});
thread.start();
خب این تردیه که میخوام استفاده کنم.
ممنون میشم خیلی برام مهمه!
یه جایی هم این کد رو گفتن که همین مشکل من رو داشت ولی بازم من موندم توش کسی هست این کد رو هم توضیح بده؟!
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .