Ich habe eine Listview, die Daten vom Server erhält. Und jedes Mal, wenn der Server 6 Datensätze an das Android-Programm sendet, möchte ich eine Aktualisierungsschaltfläche oder eine Zeit festlegen, zu der die Listenansicht basierend auf dieser Zeit aktualisiert wird. Ich meine, die Listview kann die neuen Daten vom Server bekommen. Jetzt, da ich diese Funktion in meiner App nicht habe, sollte ich die Anwendung einmal beenden und erneut eingeben, um neue Daten zu erhalten. Das ist mein Klassencode mir bitte sagen, wie es zu tun, weil ich zu android wirklich neu bin:Aktualisierung ListView Daten vom Server
public class welcome extends BaseActivity {
TextView loading;
ProgressBar progressBar;
private boolean goNext = false;
private int current_page = 0;
private List<HashMap<String, Object>> all_ads = new ArrayList<>();
private ListView lv;
private List<HashMap<String, Object>> all_city;
private SharedPreferences sp;
private final String SP_KEY = "my_sp";
private final String SP_LBL_UNAME = "username";
private final String SP_LBL_UPASS = "password";
private final String url_cat = "http://afghanamlaak.com/bazaar/get_cat.php";
private String url_ads = "http://afghanamlaak.com/bazaar/get_data.php?page=";
private final String url_ads_by_cat = "http://afghanamlaak.com/bazaar/get_data_by_cat.php?cat=";
private final String url_insert_ads = "http://afghanamlaak.com/bazaar/set_data.php";
private final String url_ads_by_city = "http://afghanamlaak.com/bazaar/get_data_by_city.php?cat=";
private final String url_city = "http://afghanamlaak.com/bazaar/get_city.php";
private Toolbar my_toolbar;
private NewArrayAdapter adp;
private List<HashMap<String, Object>> all_cat;
public boolean isConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] ni = cm.getAllNetworkInfo();
for (int i = 0; i < ni.length; i++) {
if (ni[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
return false;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
protected void onCreate(Bundle savedInstanceState) {
if (isConnected() == false) {
AlertDialog.Builder alert = new AlertDialog.Builder(welcome.this);
alert.setCancelable(false);
alert.setTitle(R.string.internet_error_title);
alert.setMessage(R.string.internet_error_message);
alert.setPositiveButton(R.string.btn_exit,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(0);
}
}
);
alert.create();
alert.show();
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
my_toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(my_toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
navigation_drawer myNav = (navigation_drawer) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
myNav.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.welcome_layout), my_toolbar);
/*----------------------------------------------- ads Class ---------------------------------------------------------*/
sp = getApplicationContext().getSharedPreferences(SP_KEY , MODE_PRIVATE);
final String s = sp.getString(SP_LBL_UNAME, "");
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.myRView);
RecyclerViewDataObject[] items = getMyItems();
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
recyclerView.addItemDecoration(new SimpleDividerItemDecoration(getResources()));
RecyclerViewAdapter mAdapter = new RecyclerViewAdapter(items , this);
recyclerView.setAdapter(mAdapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addOnItemTouchListener(
new RecyclerViewAdapter.RecyclerItemClickListener(getApplicationContext(), new RecyclerViewAdapter.RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if (position == 0) {
startActivity(new Intent(getApplicationContext(), cat_list.class));
}
if (position == 1) {
Intent intent = new Intent(getApplicationContext(), insert_ads.class);
intent.putExtra("url", url_insert_ads);
String[] id = new String[all_cat.size()];
String[] name = new String[all_cat.size()];
for (int i = 0; i < all_cat.size(); i++) {
id[i] = all_cat.get(i).get("id").toString();
name[i] = all_cat.get(i).get("name").toString();
}
String[] cid = new String[all_city.size()];
String[] cname = new String[all_city.size()];
for (int i = 0; i < all_city.size(); i++) {
cid[i] = all_city.get(i).get("id").toString();
cname[i] = all_city.get(i).get("name").toString();
}
intent.putExtra("cat_id", id);
intent.putExtra("cat_name", name);
intent.putExtra("city_id", cid);
intent.putExtra("city_name", cname);
intent.putExtra("UNAME", s);
startActivity(intent);
}
if (position == 2) {
sp = getApplicationContext().getSharedPreferences(SP_KEY, MODE_PRIVATE);
sp.edit().clear().commit();
Intent in = new Intent(welcome.this, main_page.class);
startActivity(in);
finish();
}
if (position == 3) {
startActivity(new Intent(getApplicationContext(), city_list.class));
}
}
})
);
loading = (TextView) findViewById(R.id.textview_loading_data);
progressBar = new ProgressBar(this);
progressBar = (ProgressBar) findViewById(R.id.welcome_progress_bar);
progressBar.setVisibility(View.GONE);
progressBar.getIndeterminateDrawable().setColorFilter(
getResources().getColor(R.color.primaryColor),
android.graphics.PorterDuff.Mode.SRC_IN);
make_category_list();
make_city_list();
clearCache();
lv = (ListView) findViewById(R.id.ads_list);
make_all_ads_list();
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int i) {
if (i == 1) {
if (view.getId() == lv.getId()) {
int currentFirstVisibleItem = lv.getFirstVisiblePosition();
int mLastFirstVisibleItem = lv.getLastVisiblePosition();
if (currentFirstVisibleItem > mLastFirstVisibleItem) {
} else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
// go down
if (goNext == true) {
goNext = false;
make_all_ads_list();
progressBar.setVisibility(View.GONE);
}
}
}
}
}
@Override
public void onScroll(AbsListView absListView, int i, int i1, int i2) {
}
});
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Intent intent = new Intent(getApplicationContext(), show_full_ads.class);
intent.putExtra("ads", all_ads.get(position));
startActivity(intent);
}
});
}
@Override
protected String[] getRequiredPermissions() {
return new String[] {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
}
@Override
protected void onAllRequiredPermissionsGranted() {
StringBuilder sb = new StringBuilder();
for (String permission : getRequiredPermissions()) {
sb.append(permission).append("\n");
}
}
public void make_ads_list_by_city()
{
try
{
DownloadTask dl = new DownloadTask();
dl.execute(url_ads);
}
catch (Exception e)
{
Log.i("NaqibMessage" , "error in ads Class in method make_ads_list_by_city -> " + e.toString());
}
}
public RecyclerViewDataObject[] getMyItems()
{
RecyclerViewDataObject[] items = {
new RecyclerViewDataObject("دسته بندیها" , R.drawable.category) ,
new RecyclerViewDataObject("آگهی جدید" , R.drawable.share) ,
new RecyclerViewDataObject("خروج" , R.drawable.logout) ,
new RecyclerViewDataObject("دسته بندی بر اساس شهر" , R.drawable.category) ,
new RecyclerViewDataObject("شرایط درج آگهی" , R.drawable.cond) ,
new RecyclerViewDataObject("درباره ما" , R.drawable.info) ,
new RecyclerViewDataObject("تماس با ما" , R.drawable.contact) ,
};
return items;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_welcome, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
//clearCache();
}
public void make_all_ads_list() {
try
{
DownloadTask dl = new DownloadTask();
dl.execute(url_ads + current_page);
current_page++;
}
catch (Exception e)
{
Log.i("NaqibMessage", "error in ads Class in method make_all_ads_list -> " + e.toString());
}
}
public void make_ads_list_by_cat()
{
try {
DownloadTask dl = new DownloadTask();
dl.execute(url_ads);
} catch (Exception e) {
Log.i("NaqibMessage", "error in ads Class in method make_ads_list_by_cat -> " + e.toString());
}
}
private class DownloadTask extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(String... params) {
String temp = "";
try {
JSONDownloader jd = new JSONDownloader();
temp = jd.downloadURL(params[0]);
}
catch (Exception e)
{
Log.i("NaqibMessage", "error in ads Class in DownloadTask -> " + e.toString());
}
return (temp);
}
@Override
protected void onPostExecute(String s)
{
ListViewLoaderTask loader = new ListViewLoaderTask();
loader.execute(s);
loading.setVisibility(View.INVISIBLE);
progressBar.setVisibility(View.GONE);
}
}
private class ListViewLoaderTask extends AsyncTask<String, Void, NewArrayAdapter> {
@Override
protected NewArrayAdapter doInBackground(String... params)
{
try
{
AdsParser parser = new AdsParser();
if(all_ads.isEmpty()) {
all_ads.addAll(parser.parse(params[0]));
adp = new NewArrayAdapter(getBaseContext(), R.layout.ads_list_row, all_ads);
} else {
adp.addAll(parser.parse(params[0]));
}
}
catch (Exception e)
{
/*
* Log.i("NaqibMessage" , "error in ListViewLoaderTask -> " + e.toString());
*/
}
return adp;
}
@Override
protected void onPostExecute(NewArrayAdapter adapter)
{
if(lv.getAdapter() == null)
lv.setAdapter(adapter);
else
adp.notifyDataSetChanged();
for (int i = 0; i < adapter.getCount(); i++) {
HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(i);
String imgURL = (String) hm.get("image_path");
HashMap<String, Object> forDownload = new HashMap<>();
forDownload.put("image_path", imgURL);
forDownload.put("position", i);
ImageDownloaderTask imageDownloader = new ImageDownloaderTask();
imageDownloader.execute(forDownload);
}
goNext = true;
}
}
private class ImageDownloaderTask extends AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>> {
@Override
protected HashMap<String, Object> doInBackground(HashMap<String, Object>... params) {
InputStream myStream;
String imgURL = (String) params[0].get("image_path");
int position = (Integer) params[0].get("position");
try {
URL url = new URL(imgURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
myStream = connection.getInputStream();
File cacheDirectory = getBaseContext().getCacheDir();
File temp = new File(cacheDirectory.getPath() + "/image_" + position + "_" + current_page + ".png");
FileOutputStream outStream = new FileOutputStream(temp);
Bitmap b = BitmapFactory.decodeStream(myStream);
b.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
HashMap<String, Object> bitmap = new HashMap<>();
bitmap.put("image", temp.getPath());
bitmap.put("position", position);
return (bitmap);
} catch (Exception e) {
/*
Log.i("NaqibMessage" , "error in ads Class in ImageDownloaderTask -> " + e.toString());
*/
}
return null;
}
@Override
protected void onPostExecute(HashMap<String, Object> result) {
String image = (String) result.get("image");
int position = (Integer) result.get("position");
HashMap<String, Object> hm = (HashMap<String, Object>) adp.getItem(position);
hm.put("image", image);
adp.notifyDataSetChanged();
}
}
public void clearCache() {
try {
File[] f = getBaseContext().getCacheDir().listFiles();
for (File file : f) {
file.delete();
}
} catch (Exception e) {
Log.i("NaqibMessage", "error in ads Class in ClearCache -> " + e.toString());
}
}
Entschuldigung, es hat mir nicht geholfen, weil ich meinen Code nicht zu Volley ändern möchte Ich möchte es so machen, wie es ist –