在Android中自动加载每60秒JSON值

时间:2013-09-17 04:10:13

标签: android json

我开发了一个标签应用程序。

有2个用户,一个用户向其提供数据并将其存储在远程数据库中。其他用户访问平板电脑中的这些数据。但问题是每次第二个用户手动加载JSON值时,意味着它不会自动同步。

我希望它是自动的。意味着,每60秒新的JSON值将被检索并存储在本地存储区域中。它不会干扰以前存储的值。

3 个答案:

答案 0 :(得分:2)

  1. 加载JSON
  2. 创建新Calss JSONPASER

            import java.io.BufferedReader;
            import java.io.IOException;
            import java.io.InputStream;
            import java.io.InputStreamReader;
            import java.io.UnsupportedEncodingException;
            import java.util.List;
    
            import org.apache.http.HttpEntity;
            import org.apache.http.HttpResponse;
            import org.apache.http.NameValuePair;
            import org.apache.http.client.ClientProtocolException;
            import org.apache.http.client.entity.UrlEncodedFormEntity;
            import org.apache.http.client.methods.HttpGet;
            import org.apache.http.client.methods.HttpPost;
            import org.apache.http.client.utils.URLEncodedUtils;
            import org.apache.http.impl.client.DefaultHttpClient;
            import org.json.JSONException;
            import org.json.JSONObject;
    
            import android.util.Log;
    
            public class JSONParser {
    
            static InputStream is = null;
            static JSONObject jObj = null;
            static String json = "";
    
            // constructor
            public JSONParser() {
    
            }
    
            // function get json from url
            // by making HTTP POST or GET method
            public JSONObject makeHttpRequest(String url, String method,
            List<NameValuePair> params) {
    
        // Making HTTP request
        try {
    
            // check for request method
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));
    
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
    
            }else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);
    
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }           
    
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
    
        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
    
        // return JSON String
        return jObj;
    
    }
    }
    

    在现有类中创建另一个内部类(异步类)

        class AttemptJson extends AsyncTask<String, String, String> {
    
         /**
         * Before starting background thread Show Progress Dialog
         * */
        boolean failure = false;
    
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Login.this);
            pDialog.setMessage("JSON Attempting ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }
    
        @Override
        protected String doInBackground(String... args) {
            // TODO Auto-generated method stub
             // Check for success tag
            int success;
            String username = user.getText().toString();
            String password = pass.getText().toString();
            try {
                // Building Parameters
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("Key", value));
    
    
                Log.d("request!", "starting");
                // getting product details by making HTTP request
                JSONObject json = jsonParser.makeHttpRequest(
                       LOGIN_URL, "POST", params);
    
                // check your log for json response
                Log.d("attempt", json.toString());
    
                // json success tag
                success = json.getInt(TAG_SUCCESS);
                if (success == 1) {
                    Log.d("Login Successful!", json.toString());
                    Intent i = new Intent(Login.this, ReadComments.class);
                    finish();
                startActivity(i);
                    return json.getString(TAG_MESSAGE);
                }else{
                    Log.d("Login Failure!", json.getString(TAG_MESSAGE));
                    return json.getString(TAG_MESSAGE);
    
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
            return null;
    
        }
        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String file_url) {
            // dismiss the dialog once product deleted
            pDialog.dismiss();
            if (file_url != null){
                Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
            }
    
        }
    
    }
    
    1. 每60秒刷新一次

       new Handler().postDelayed(new new Runnable() {
          public void run() {
          // call JSON methods here
          new AttemptJson ().execute();
            }
       }, 60000  );
      
    2. 存储在本地存储中

         JSONObject jOb = json; // json is ths object where u have crated in the class
      

答案 1 :(得分:0)

使用

在60秒后调用JSON函数
new Handler().postDelayed(new new Runnable() {
    public void run() {
        // call JSON methods here
    }
}, 60000);

答案 2 :(得分:0)

每隔60秒使用线程刷新一次 并使用本地数据库中的唯一值来存储