当新的数据插入到列表视图Android的自动刷新 [英] Android auto refresh when new data inserted into listview

查看:213
本文介绍了当新的数据插入到列表视图Android的自动刷新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在开发Android应用程序。 我有后端(Web应用程序)和前端(Android应用程序)。

I've been developing android application. I have back end ( Web Application ) and front end ( Android Application ).

在我的应用程序,它包含了一堆的产品清单的范畴。 当我选择一个类别,它会调用使用调用所有的数据在DB的任务。 一旦任务完成呼叫的所有数据,它会直接向活动。 而活动将显示在ListView的所有数据。

In my application, it has category that contain a bunch of list of items. When i choose a category, it will call a task that use to call all data in DB. Once task complete call all data, it'll direct to activity. And activity will show all data in a ListView.

现在,比如我插入来自后端(网络)新的数据。 让我们只说我插入新行包含一个拳击进入体育范畴。 所以,在DB这将有拳击在桌子运动。

Now, for example i insert a new data from back end ( Web ). Let just say i insert a new row contain a boxing into sport category. So, in DB it'll have boxing in table sport.

而在我的Andr​​oid应用程序,我目前是在体育范畴。 所以,当拳击插入到新的数据库,它应该有自动刷新,并告诉我拳击在列表中。

And in my android application, i'm currently in sport category. So, when boxing inserted into new DB, it should have auto refresh and show me boxing in the list.

但我怎么做时,任务只运行一次,当我点击类别列表中的类别? 我想在DB数据总量和Android应用程序,所显示的数据进行比较。 当数据是不一样的,它会再次调用任务。

But how do i do it when the task only run once when i click a category in category list ? i want to compare the total of data in DB and the data that shown in android application. When the data isn't the same, it'll call the task again.

这是在code其中,我想我的应用程序刷新

This is the code where i want my application to refresh

ConnectivityManager connManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    if(mWifi.isConnected()) 
    {
        refresh = new Runnable() {
            public void run() {
                // Do something
                handler.postDelayed(refresh, 1000);
            }
        };
        handler.post(refresh);

        /*gridArray = new ArrayList<FlipItem>();
        adapter = new PackageListItemAdapter(this, this, gridArray);        
        adapter.notifyDataSetChanged();*/

    }
    else
    {
        refresh = new Runnable() {
            public void run() {
                // Do something
                handler.postDelayed(refresh, 60000);
            }
        };
        handler.post(refresh);
        /*gridArray = new ArrayList<FlipItem>();
        adapter = new PackageListItemAdapter(this, this, gridArray);        
        adapter.notifyDataSetChanged();*/
    }

在code,其中我有意见,使我的列表仅显示9在那里我有15个项目的数据库。 这就是为什么我评论这行

The code where i comment there, make my list only show about 9 where i have 15 items on DB. That's why i comment that line

推荐答案

呼叫<一href="http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged%28%29"相对=nofollow> notifyDataSetChanged()在您的适配器。

如何/何时调用一些额外的细节 notifyDataSetChanged()可在此的谷歌I / O视频

Some additional specifics on how/when to call notifyDataSetChanged() can be viewed in this Google I/O video.

使用一个处理程序 postDelayed 法列表中的适配器失效如下:

Use a Handler and its postDelayed method to invalidate the list's adapter as follows:

final Handler handler = new Handler()
handler.postDelayed( new Runnable() {

    @Override
    public void run() {
        adapter.notifyDataSetChanged();
        handler.postDelayed( this, 60 * 1000 );
    }
}, 60 * 1000 );

您只能在主(UI)线程更新用户界面。

You must only update UI in the main (UI) thread.

通过创建在主线程的处理程序,可以确保你邮寄到处理程序,一切都运行在主线程也。

By creating the handler in the main thread, you ensure that everything you post to the handler is run in the main thread also.

try
                {
                    validat_user(receivedName);
                    final Handler handler = new Handler();
                    handler.postDelayed( new Runnable() {

                        @Override
                        public void run() {
                            todoItems.clear();
                            //alertDialog.cancel();
                            validat_user(receivedName);
                            handler.postDelayed( this, 60 * 1000 );
                        }
                    }, 60 * 1000 );


                }

                catch(Exception e)
                {
                    display("Network error.\nPlease check with your network settings.");
                }

首先验证用户是第一次加载数据,利用处理后,我可以更新值,每隔一分钟

First validate user is first time load the data ,after using handler i can update the values every one minute

我的全力code低于

package com.example.employeeinduction;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.Toast;


public class pdf extends Activity
{

    ImageView iv;
    public boolean connect=false,logged=false;
    public String db_select;
    ListView l1;
    AlertDialog alertDialog;
    String mPwd,UName1="Success",UName,ret,receivedName;
    public Iterator<String> itr;
    //private String SERVICE_URL = "http://61.12.7.197:8080/pdf";
    //private String SERVICE_URL1 = "http://61.12.7.197:8080/url";
    //private final String SERVICE_URL = "http://10.54.3.208:8080/Employee/person/pdf";
    //private final String SERVICE_URL1 = "http://10.54.3.208:8080/Employee/person/url";
    private final String SERVICE_URL = Urlmanager.Address+"pdf";
    private final String SERVICE_URL1 = Urlmanager.Address+"url";
    private final String TAG = "Pdf";
    ArrayList<String> todoItems;
    Boolean isInternetPresent = false;
    ConnectionDetector cd;
    ArrayAdapter<String> aa;
    public List<String> list1=new ArrayList<String>();
    public DrawerLayout mDrawerLayout;
    public ListView mDrawerList;
    //public ActionBarDrawerToggle mDrawerToggle;

    // NavigationDrawer title "Nasdaq" in this example
    public CharSequence mDrawerTitle;

    //  App title "Navigation Drawer" in this example 
    public CharSequence mTitle;

    // slider menu items details 
    public String[] navMenuTitles=null;
    public TypedArray navMenuIcons;

    public ArrayList<NavDrawerItem> navDrawerItems;
    public NavDrawerListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sliding_project);
         iv = (ImageView)findViewById(R.id.imageView2);
        l1 = (ListView)findViewById(R.id.list);


        mTitle = mDrawerTitle = getTitle();

        // getting items of slider from array
        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

        // getting Navigation drawer icons from res 
        navMenuIcons = getResources()
                .obtainTypedArray(R.array.nav_drawer_icons);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

        navDrawerItems = new ArrayList<NavDrawerItem>();


        // list item in slider at 1 Home Nasdaq details
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
        // list item in slider at 2 Facebook details
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
        // list item in slider at 3 Google details
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
        // list item in slider at 4 Apple details


        // Recycle array
        navMenuIcons.recycle();

        mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

        // setting list adapter for Navigation Drawer
        adapter = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems);
        mDrawerList.setAdapter(adapter);

        if (savedInstanceState == null) {
              displayView(0);
        }

          iv.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {


                    PopupMenu popup = new PopupMenu(getBaseContext(), v);

                    /** Adding menu items to the popumenu */
                    popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());

                    popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                        @Override
                        public boolean onMenuItemClick(MenuItem item) {

                            switch (item.getItemId()){
                            case R.id.Home:
                                Intent a = new Intent(pdf.this,Design_Activity.class);
                                startActivity(a);
                                //Projects_Accel.this.finish();
                            //  return true;
                                break;
                            case R.id.Logout:
                                /*Intent z = new Intent(this,MainActivity.class);
                                z.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(z);
                                this.finish();*/
                                Intent z = new Intent(pdf.this,MainActivity.class);
                                z.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
                                        Intent.FLAG_ACTIVITY_CLEAR_TASK |
                                        Intent.FLAG_ACTIVITY_NEW_TASK);
                                startActivity(z);
                                pdf.this.finish();
                            //  return true;
                                break;
                            }

                            return true;
                        }
                    });
                        popup.show();
                }
            });

             todoItems = new ArrayList<String>();
                aa = new ArrayAdapter<String>(this,R.layout.list_row,R.id.title,todoItems);
                l1.setAdapter(aa);
                todoItems.clear();
                Intent intent = getIntent();
                receivedName = (String) intent.getSerializableExtra("PROJECT");
                cd = new ConnectionDetector(getApplicationContext());
                isInternetPresent = cd.isConnectingToInternet();
                if(isInternetPresent)
                {
                try
                {
                    validat_user(receivedName);
                    final Handler handler = new Handler();
                    handler.postDelayed( new Runnable() {

                        @Override
                        public void run() {
                            todoItems.clear();
                            //alertDialog.cancel();
                            validat_user(receivedName);
                            handler.postDelayed( this, 60 * 1000 );
                        }
                    }, 60 * 1000 );


                }

                catch(Exception e)
                {
                    display("Network error.\nPlease check with your network settings.");
                }
                }
                else
                {
                    display("No Internet Connection..");
                }

                l1.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {

                     String name=(String)parent.getItemAtPosition(position);

                     /*Toast.makeText(getBaseContext(), name, Toast.LENGTH_LONG).show();
                      Intent i = new Intent(getBaseContext(),Webview.class);
                      i.putExtra("USERNAME", name);
                      startActivity(i);*/
                     cd = new ConnectionDetector(getApplicationContext());
                        isInternetPresent = cd.isConnectingToInternet();
                     if(isInternetPresent)
                        {
                     try
                        {
                            validat_user1(receivedName,name);

                        }
                        catch(Exception e)
                        {
                            display("Network error.\nPlease check with your network settings.");

                        }

                        }
                     else
                        {
                            display("No Internet Connection..");
                        }
                    }
                });

             }      
    private class SlideMenuClickListener implements
    ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    // display view for selected item
    displayView(position);
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
//setMenuBackground();
return true;
}


/*@Override
public boolean onOptionsItemSelected(MenuItem item) {
//  title/icon
if (mDrawerToggle.onOptionsItemSelected(item)) {
    return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.action_settings:
    return true;
default:
    return super.onOptionsItemSelected(item);
}
}*/

//called when invalidateOptionsMenu() invoke 

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if Navigation drawer is opened, hide the action items
//boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
//menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}

private void displayView(int position) {
// update the main content with called Fragment
switch (position) {

case 1:
    //fragment = new Fragment2Profile();
    Intent i = new Intent(pdf.this,Design_Activity.class);
    startActivity(i);
    pdf.this.finish();
    break;
case 2:
    //fragment = new Fragment3Logout();
    Intent z = new Intent(pdf.this,MainActivity.class);
    z.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
             Intent.FLAG_ACTIVITY_CLEAR_TASK |
             Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(z);
        pdf.this.finish();
    break;

default:
    break;
}



}




        public void display(String msg) 
        {
            Toast.makeText(pdf.this, msg, Toast.LENGTH_LONG).show();
        }
        private void validat_user(String st)
        {

            WebServiceTask wst = new WebServiceTask(WebServiceTask.POST_TASK, this, "");

           wst.addNameValuePair1("TABLE_NAME", st);
           // wst.addNameValuePair("Emp_PWD", stg2);
           // db_select=stg1;
            //display("I am");
            wst.execute(new String[] { SERVICE_URL });
            //display(SERVICE_URL);

        }
        private void validat_user1(String stg1,String stg2)
        {
            db_select=stg1;
            WebServiceTask wst = new WebServiceTask(WebServiceTask.POST_TASK, this, "Loading...");

            wst.addNameValuePair1("PDF_NAME", stg1);
            wst.addNameValuePair1("TABLE_NAME1", stg2);
            wst.execute(new String[] { SERVICE_URL1 });

        }
        @SuppressWarnings("deprecation")
        public void no_net()
        {
            display( "No Network Connection");
            final AlertDialog alertDialog = new AlertDialog.Builder(pdf.this).create();
            alertDialog.setTitle("No Internet Connection");
            alertDialog.setMessage("You don't have internet connection.\nElse please check the Internet Connection Settings.");
            //alertDialog.setIcon(R.drawable.error_info);
            alertDialog.setCancelable(false);
            alertDialog.setButton("Close", new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int which)
                {   
                    alertDialog.cancel();
                    pdf.this.finish();
                    System.exit(0);
                }
            });
            alertDialog.setButton2("Use Local DataBase", new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int which)
                {
                    display( "Accessing local DataBase.....");
                    alertDialog.cancel();
                }
            });
            alertDialog.show();
        }

        private class WebServiceTask extends AsyncTask<String, Integer, String> {

            public static final int POST_TASK = 1;

            private static final String TAG = "WebServiceTask";

            // connection timeout, in milliseconds (waiting to connect)
            private static final int CONN_TIMEOUT = 12000;

            // socket timeout, in milliseconds (waiting for data)
            private static final int SOCKET_TIMEOUT = 12000;

            private int taskType = POST_TASK;
            private Context mContext = null;
            private String processMessage = "Processing...";

            private ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();

            private ProgressDialog pDlg = null;

            public WebServiceTask(int taskType, Context mContext, String processMessage) {

                this.taskType = taskType;
                this.mContext = mContext;
                this.processMessage = processMessage;
            }

            public void addNameValuePair1(String name, String value) {

                params.add(new BasicNameValuePair(name, value));
            }
            @SuppressWarnings("deprecation")
            private void showProgressDialog() {

                pDlg = new ProgressDialog(mContext);
                pDlg.setMessage(processMessage);
                pDlg.setProgressDrawable(mContext.getWallpaper());
                pDlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                pDlg.setCancelable(false);
                pDlg.show();

            }

            @Override
            protected void onPreExecute() {

                showProgressDialog();

            }

            protected String doInBackground(String... urls) {

                String url = urls[0];
                String result = "";

                HttpResponse response = doResponse(url);

                if (response == null) {
                    return result;
                } else {

                    try {

                        result = inputStreamToString(response.getEntity().getContent());

                    } catch (IllegalStateException e) {
                        Log.e(TAG, e.getLocalizedMessage(), e);

                    } catch (IOException e) {
                        Log.e(TAG, e.getLocalizedMessage(), e);
                    }

                }

                return result;
            }

            @Override
            protected void onPostExecute(String response) {

                handleResponse(response);
                pDlg.dismiss();

            }


            // Establish connection and socket (data retrieval) timeouts
            private HttpParams getHttpParams() {

                HttpParams htpp = new BasicHttpParams();

                HttpConnectionParams.setConnectionTimeout(htpp, CONN_TIMEOUT);
                HttpConnectionParams.setSoTimeout(htpp, SOCKET_TIMEOUT);

                return htpp;
            }

            private HttpResponse doResponse(String url) {

                // Use our connection and data timeouts as parameters for our
                // DefaultHttpClient
                HttpClient httpclient = new DefaultHttpClient(getHttpParams());

                HttpResponse response = null;

                try {
                    switch (taskType) {

                    case POST_TASK:
                        HttpPost httppost = new HttpPost(url);
                        // Add parameters
                        httppost.setEntity(new UrlEncodedFormEntity(params));

                        response = httpclient.execute(httppost);
                        break;
                    }
                } catch (Exception e) {
                    display("Remote DataBase can not be connected.\nPlease check network connection.");

                    Log.e(TAG, e.getLocalizedMessage(), e);
                    return null;

                }

                return response;
            }

            private String inputStreamToString(InputStream is) {

                String line = "";
                StringBuilder total = new StringBuilder();

                // Wrap a BufferedReader around the InputStream
                BufferedReader rd = new BufferedReader(new InputStreamReader(is));

                try {
                    // Read response until the end
                    while ((line = rd.readLine()) != null) {
                        total.append(line);
                    }
                } catch (IOException e) {
                    Log.e(TAG, e.getLocalizedMessage(), e);
                }

                // Return full string
                return total.toString();
            }

        }
        public void handleResponse(String response) 
        {    //display("JSON responce is : "+response);
            if(!response.equals(""))
            {
           try {

                JSONObject jso = new JSONObject(response);


                      int UName = jso.getInt("status1");

                      if(UName==1)
                      {
                            String status = jso.getString("reps1");
                            ret=status.substring(12,status.length()-2);
                            todoItems.add(0, ret);
                            aa.notifyDataSetChanged();
                      }
                      else if(UName==-1)
                      {
                          String status = jso.getString("status");
                          //ret=status.substring(12,status.length()-2);
                          //display(status);
                            Intent intObj=new Intent(pdf.this,Webview.class);
                             intObj.putExtra("USERNAME",status);
                            startActivity(intObj);
                      }
                      else if(UName>1)
                      {
//                       int count=Integer.parseInt(UName);
//                       display("Number of Projects have been handling in AFL right now: "+count);
                        list1=new ArrayList<String>();

                        JSONArray array=jso.getJSONArray("reps1");
                        for(int i=0;i<array.length();i++)
                        {
                            list1.add(array.getJSONObject(i).getString("pdfName"));

                        }Collections.sort(list1);
                        Collections.reverse(list1);
                        itr=list1.iterator();
                        while(itr.hasNext())
                        {
                             //str1=itr.next()+"\n";
                            todoItems.add(0, itr.next().toString());
                            aa.notifyDataSetChanged();
                        }

                        //tv1.setText(str1);


                      }  
                      else
                      {
                          final Context context = this;
                            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                                context);

                            // set title
                            alertDialogBuilder.setTitle("");

                            // set dialog message
                            alertDialogBuilder
                                .setMessage("Records unavailable for this project!")
                                .setCancelable(false)
                                .setPositiveButton("Exit",new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,int id) {
                                        // if this button is clicked, close
                                        // current activity
                                        pdf.this.finish();
                                    }
                                  });

                                // create alert dialog
                                alertDialog = alertDialogBuilder.create();

                                // show it
                                alertDialog.show();
                      }
            } catch (Exception e) {
                Log.e(TAG, e.getLocalizedMessage(), e);
                return;
            }
            }
            else
            {
                display("unable to reach the server");
            }


        }



        /**
         * Slider menu item click listener
         * */
        /*private class SlideMenuClickListener implements
                ListView.OnItemClickListener {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                // display view for selected item
                displayView(position);
            }
        }


        private void displayView(int position) {
            // update the main content with called Fragment
        //  Fragment fragment = null;
            switch (position) {
            case 0:
            //  fragment = new Fragment1User();
                break;
            case 1:
            //  fragment = new Fragment2Profile();
                break;
            case 2:
            //  fragment = new Fragment3Logout();
                break;

            default:
                break;
            }
        }*/


}

这篇关于当新的数据插入到列表视图Android的自动刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆