在android中使用json的刷新屏幕

时间:2014-04-03 07:06:40

标签: android json page-refresh

我的应用程序中有一个使用json的模块。

json总是会更新。

我希望在新数据到达时刷新屏幕。

有什么方法吗?

我希望在新数据到达时刷新屏幕,或者每隔5秒钟刷新一次(固定的时间)。如何做?

我只是使用本地json文件来测试它。

我只需要刷新代码。

这是我的json解析代码:

public class MainActivity extends Activity 
{
    String myjsonstring;

     ArrayList<Data> web = new ArrayList<Data>();

     @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        JsonParser();


        // Try to parse JSON
        try {


            JSONObject jsonObjMain = new JSONObject(myjsonstring);
            JSONArray jsonArray = jsonObjMain.getJSONArray("pgm");

            for (int i = 0; i < jsonArray.length(); i++) {

                // Creating JSONObject from JSONArray
                JSONObject jsonObj = jsonArray.getJSONObject(i);

                // Getting data from individual JSONObject

                Data data = new Data(jsonObj.getString("name") , jsonObj.getString("viewers"));

                web.add(data);
            }

            final customtest1 adapter = new customtest1(MainActivity.this,R.layout.list_single,web); 
            ListView list = (ListView)findViewById(R.id.list);
            list.setAdapter(adapter);

            list.setOnItemClickListener(new AdapterView.OnItemClickListener() 
            {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                     Toast.makeText(MainActivity.this, "Test.........", Toast.LENGTH_SHORT).show();
                     adapter.notifyDataSetChanged();
                }

            });

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }

    private void JsonParser() 
    {
        // Reading text file from assets folder
        StringBuffer sb = new StringBuffer();
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(getAssets().open(
                    "main.json")));
            String temp;
            while ((temp = br.readLine()) != null)
                sb.append(temp);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                br.close(); // stop reading
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        myjsonstring = sb.toString();

    }
    }

1 个答案:

答案 0 :(得分:1)

这样做。 创建一个类

public class Data
{
String name ="";
String viewers ="";

public Data(String n,String v)
{
name = n;
viewers=v;
}   
}

然后在MainActivity中仅创建类型为arraylist

的单Data
ArrayList<Data> web = new ArrayList<Data>();

然后解析你的json

// Creating JSONObject from String
        JSONObject jsonObjMain = new JSONObject(myjsonstring);

        // Creating JSONArray from JSONObject
        JSONArray jsonArray = jsonObjMain.getJSONArray("pgm");

        // JSONArray has four JSONObject
        for (int i = 0; i < jsonArray.length(); i++) {

            // Creating JSONObject from JSONArray
            JSONObject jsonObj = jsonArray.getJSONObject(i);

            // Getting data from individual JSONObject

            Data data = new Data(jsonObj.getString("name") , jsonObj.getString("viewers"));

            web.add(data);

现在不是将两个数组列表传递给自定义适配器,而只传递单个arraylist,即web

customtest adapter = new customtest(MainActivity.this,R.layout.list_single,web); 
ListView list = (ListView)findViewById(R.id.list);
list.setAdapter(adapter);

在您的customtest课程中,getview内部绑定数据时,您将会这样做

Data dt = web.get(position);
String name = dt.name;
String viewers = dt.viewers;

然后做你以前做过的事。

并且在此之后,现在只要您想要更新列表,只需致电

adapter.notifyDataSetChanged();

您的customtest课程现在就像

    public class customtest extends ArrayAdapter<Data>{

Context context; 
int layoutResourceId;    
ArrayList<Data> data = null;

public customList(Context context, int layoutResourceId, ArrayList<Data> data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    CustomHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new CustomHolder();
        holder.txtName = (TextView)row.findViewById(R.id.txtName);   //this is id of textview where you want to set name
        holder.txtViewers = (TextView)row.findViewById(R.id.txtViewers);     //this is id of textview where you want to set viewers

        row.setTag(holder);
    }
    else
    {
        holder = (CustomHolder)row.getTag();
    }

    Data dt = data.get(postition);
    holder.txtName.setText(dt.name);
    holder.txtViewers.setText(dt.viewers);

        return row;
    }

        static class CustomHolder
        {
            TextView txtName;
            TextView txtViewers;
        }
    }

/////////////////////////////////////////////// ///////////////////////////////////////////

new Thread(){

public void run()
{
While(true)
{
Thread.sleep(3000);
jsonParse(); //this is your method for parsing json
}
}

}.start();