PDA

View Full Version : بروز شدن بصورت خودکار در لیست ویو (اندروید)



Sp|R|T
سه شنبه 22 اسفند 1391, 12:42 عصر
سلام خدمت مدیران هم وطن

خدا کنه این سوالم هم مثه همیشه بی جواب نمونه ....

من قصد دارم یه برنامه ی ساده ای رو توی ایندورید پیاده کنم که در کارم هم از PHP و Mysql که توسط pars کردن اطلاعات، توی اندروید (lest view) به نمایش در میارم.

الان مشکلم اینه که من میخوام کاری کنم که در list view بصورت خودکار اطلاعات جدیدی که توی mysql اینسرت شده رو نشون بده

یعنی لازم نباشه که دوباره برنامه رو اجرا کنم تا اطلاعات جدید نشون بده

واسه این کار، چه روشی رو پیشنهاد میکنین ؟

در اینجا هم سوال + کد رو گذاشتم:

http://stackoverflow.com/questions/15348540/update-listview-after-adding-new-data-into-database-in-android

ممنون

hamid_hr
سه شنبه 22 اسفند 1391, 15:15 عصر
سلام
ميتوني از تايمر استفاده كني يا از theard
چك كنه اگه تغيير كرده بود اونم لود كنه

Sp|R|T
سه شنبه 22 اسفند 1391, 17:34 عصر
سلام
ميتوني از تايمر استفاده كني يا از theard
چك كنه اگه تغيير كرده بود اونم لود كنه

ممنونم حمید جان
این روش تو ذهنم بود ولی بنظرتون این روش مناسبه که بصورت یک تایمر، هِی لیست ویو رفرش بشه ؟

من توی چند سایت که سرچ کردم گفته بودن باید از adapter استفاده کنید...

شما با adapter کار کردین ؟

ممنون میشم راهنماییم کنید

hamid_hr
چهارشنبه 23 اسفند 1391, 11:33 صبح
نميخواد هي رفرش كني
ميتوني يك جدول تمپلت قرار بدي زماني كه تغيير تو تيبلت داشتي او جدولو تغيير بدي
با اون تايمرت اين جدوله رو چك كني اگه تغيير داده بودنش ليستو رفرش كني
اينم برا ادپتر ها
http://www.vogella.com/articles/AndroidListView/article.html

Sp|R|T
چهارشنبه 23 اسفند 1391, 11:52 صبح
نميخواد هي رفرش كني
ميتوني يك جدول تمپلت قرار بدي زماني كه تغيير تو تيبلت داشتي او جدولو تغيير بدي
با اون تايمرت اين جدوله رو چك كني اگه تغيير داده بودنش ليستو رفرش كني
اينم برا ادپتر ها
http://www.vogella.com/articles/AndroidListView/article.html

خیلی ممنون حمید جان
ولی من تازه دارم برنامه نویسی اندروید کار میکنم،البته برنامه نویسی به زبون های دیگه مثله php , C#, mysql رو کار کردم

ممنون میشم با یه تیکه کدی منو راهنمایی کنید،
بخدا خیلی ضروری هسش

تا الان تا قسمتی که بتونم دیتا ها رو توی لیست ویو نشون بدم پیش رفتم و هیچ مشکلی ندارم و کلآ کدهایی که استفاده کردم قابل فهم هسش

فقط من میخوام حالا خودش بصورت خودکار دیتاهای جدید رو چک کنه و بنشون در بیاره

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

http://stackoverflow.com/questions/15348540/update-listview-after-adding-new-data-into-database-in-android

ممنون حمید جان

sajadpm
چهارشنبه 23 اسفند 1391, 12:47 عصر
با سلام و خسته نباشید

با جستجویی که من داشتم اینکه شما باید از
notifyDataSetChanged()
استفاده کنید مثلا :
adapter.notifyDataSetChanged(); فراخوانی کنید

شما می تونید از این لینک ها هم کمک بگیرید :
http://stackoverflow.com/questions/2250770/how-to-refresh-android-listview
http://stackoverflow.com/questions/4903758/android-how-to-refresh-listview-contents
http://stackoverflow.com/questions/5186359/donenotifydatasetchanged-does-not-update-listactivity-automatically

Sp|R|T
چهارشنبه 23 اسفند 1391, 18:32 عصر
با سلام و خسته نباشید

با جستجویی که من داشتم اینکه شما باید از
notifyDataSetChanged()
استفاده کنید مثلا :
adapter.notifyDataSetChanged(); فراخوانی کنید

شما می تونید از این لینک ها هم کمک بگیرید :
http://stackoverflow.com/questions/2250770/how-to-refresh-android-listview
http://stackoverflow.com/questions/4903758/android-how-to-refresh-listview-contents
http://stackoverflow.com/questions/5186359/donenotifydatasetchanged-does-not-update-listactivity-automatically

خیلی ممنون آقا سجاد

من کل گوگل رو زیرو رو کردم ولی به نتیجه نرسیدم
یعنی نفهمیدم باید چیکار کنم

تا الان یه فرضیه ای رو واسه خودم ساختم و نمیدونم که درسته یا نه

فرضیم اینه که من اول باید یه آداپتر بسازم
بعد توی آداپتر تعریف کنم که هر چند ثانیه یه بار اطلاعات رو از وب سرویس بگیره و اگه بفهمه که اطلاعات جدیدی وجود داره، بیاد به لیست ویو انتقال بده و در نهایت لیست ویو توسط کد "adapter.notifyDataSetChanged();" بیاد خودشو بروز کنه.

آیا این چیزی که تا فعلآ خودم فهمیدم درسته ؟

یه نظریه ای دیگه که دوستان در سایت مشابه عرض کردن، گفتم باید یک تایمر بزاری

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

package com.example.androidhive;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

//import com.mekya.R;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class AllProductsActivity extends ListActivity {


private Timer timer;
// Progress Dialog
private ProgressDialog pDialog;

// Creating JSON Parser object
JSONParser jParser = new JSONParser();

ArrayList<HashMap<String, String>> all_chat;

// url to get all products list
private static String url_all_products = "http://url.com/chat-app/";

// JSON Node names
private static final String TAG_CHAT = "chat";
private static final String TAG_FROM = "from_u";
private static final String TAG_MESSAGE = "message";
private static final String TAG_DATE = "date";




// products JSONArray
JSONArray chat = null;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.all_products);

timer = new Timer();
// Hashmap for ListView
all_chat = new ArrayList<HashMap<String, String>>();

new LoadAllProducts().execute();
// Loading products in Background Thread



}

/**
* Background Async Task to Load all product by making HTTP Request
* */
class LoadAllProducts extends AsyncTask<String, String, String> {

/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(AllProductsActivity.this);
pDialog.setMessage("Loading products. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}

/**
* getting All products from url
* */
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);

// Check your log cat for JSON reponse
Log.d("All Products: ", json.toString());

try {
// products found
// Getting Array of Products
chat = json.getJSONArray(TAG_CHAT);

// looping through All Products
for (int i = 0; i < chat.length(); i++) {
JSONObject c = chat.getJSONObject(i);

// Storing each json item in variable
String date = c.getString(TAG_DATE);
String from = c.getString(TAG_FROM);
String message = c.getString(TAG_MESSAGE);

// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();

// adding each child node to HashMap key => value
map.put(TAG_DATE, date);
map.put(TAG_FROM, from);
map.put(TAG_MESSAGE, message);

// adding HashList to ArrayList
all_chat.add(map);
}

} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
pDialog.dismiss();
// updating UI from Background Thread

runOnUiThread(new Runnable() {

public void run() {
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
AllProductsActivity.this, all_chat, R.layout.list_item, new String[] { TAG_FROM,TAG_DATE, TAG_MESSAGE },
new int[] { R.id.from,R.id.date, R.id.message });
// updating listview
setListAdapter(adapter);

}
});

}

}
}

میبینید که LoadAllProducts().execute در OnCreate بکار بردم و میتونم با تکرار LoadAllProducts().execute، لیست ویو رو طی یک زمان مشخص آپدیت کنم (یعنی تایمر بزارم)

من واسه این کار یه تایمر به شکل زیر گذاشتم ولی برنامه کرش میکنه:

// Loading products in Background Thread
timer.schedule(new TimerTask()
{

@Override
public void run() {
new LoadAllProducts().execute();

}


}, 10000, 10000);

مشکل از چیه ؟

آیا این متودی که بکار بردم درسته ؟

mahdi1373
پنج شنبه 24 اسفند 1391, 22:01 عصر
راه اول اینه که یه http request برای این بنویسید که آیا دیتا آپدیت شده یا نه...
راه دیگه هم اینه که اگه سرور دستتونه، یه tcp packet بفرستین به دستگاه یا حتی upd datagram رو multicast کنید که من پیشنهاد نمیکنم.