【问题标题】:Downloading web pages and refreshing it when connection available下载网页并在连接可用时刷新
【发布时间】:2014-08-26 13:02:44
【问题描述】:

所以我正在构建一个包含大量网络内容的应用程序,我计划使用 Phone Gap 构建版本发布它,但将在线托管所有内容并链接到它。我想知道是否有一种方法可以在有活动的互联网连接以供离线使用时下载网页,并且当再次连接以刷新数据时,最好是在用户使用 wifi 连接时。该站点将主要使用 html、js 和 php。我将与 bluehost 托管

有没有办法做到这一点?提前致谢!利特尔斯瓦尼!

【问题讨论】:

    标签: javascript android html ios phonegap-build


    【解决方案1】:

    PhoneGap 应用从商店下载时会下载到设备上。它们基本上是一个 index.html 文件的包装器,但该应用程序实际上是用 JavaScript 编写的,它负责创建和显示视图等。您需要检查互联网连接的唯一时间是与您的背部通信时end (PHP)... 如果 ajax 请求失败,最好的解决方案是为用户提供一个按钮/链接,以便在他们重新获得 Internet 连接后重试,或者设置一个间歇性触发的计时器以继续重试。 . 切勿在您的 Phone Gap 应用程序中使用 while(true) 循环 - 它只会挂起。

    【讨论】:

    • PS 你只会在 bluehost 上托管你的 PHP。 JavaScript/HTML/CSS 都是从应用商店下载的。
    【解决方案2】:

    我不熟悉 java,但我认为我可以提供完成工作的逻辑。

    您想要执行一个无限循环来检查用户是否在 wifi 上。如果为真,则使用 wget、rsync 或 scp 下载网站。像这样。:

    while (true){
        // do an if statement that checks if user is on wifi. Then do a then statement that uses rsync or wget. 
    }
    

    关于如何在 java 的 while 循环中嵌套 if 语句的信息:java loop, if else

    我不知道 wget、rsync 或 scp 是否可以从 java 运行。您需要更多地研究它或编写自己的替代函数来完成它。比如:

    function download_file() {
           var url = "http://www.example.com/file.doc"
           window.location = url;
         }
    

    你应该可以像这样从你的java中做到这一点:

    String whatToRun = "/usr/local/bin/wget http://insitu.fruitfly.org/insitu_image_storage/img_dir_38/insitu38795.jpe";
    

    来源: 1.What is the equivalent of wget in javascript to download a file from a given url? 2.Call a command in terminal using Java (OSX)

    【讨论】:

    • 你不想做无限循环,尤其是在手机上的 JS 中。 Phonegap 有在上线和下线时触发的事件。
    • 谢谢。这是一个更好的解决方案。
    【解决方案3】:

    首先创建一个连接过滤器类

    public class Connection_Status{
        private static ConnectivityManager connectivityManager;
        static boolean connected = false;
    
        public static Boolean isOnline(Context ctx) {
            try {
                connectivityManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
                connected = networkInfo != null && networkInfo.isAvailable()&& networkInfo.isConnected();
                return connected;
            } catch (Exception e) {
                System.out.println("CheckConnectivity Exception: " + e.getMessage());
            }
            return connected;
        }
    }
    

    在你的主课中

        public class Main extends Activity{
           private WebView mWebView;
    
          protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
    
           mWebView = (WebView) findViewById(R.id.webview);
           mWebView.getSettings().setJavaScriptEnabled(true);
           mWebView.getSettings().setBuiltInZoomControls(true);
    
    if(Connection_Status.isOnline(Main.this)){
    
        HttpClient httpclient = new DefaultHttpClient(); // Create HTTP Client
        HttpGet httpget = new HttpGet("http://yoururl.com"); // Set the action you want to do
        HttpResponse response = httpclient.execute(httpget); // Executeit
        HttpEntity entity = response.getEntity(); 
        InputStream is = entity.getContent(); // Create an InputStream with the response
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) // Read line by line
            sb.append(line + "\n");
    
        String resString = sb.toString(); //
    
        is.close(); // Close the stream
                 }
            }
       }
    

    或者您可以在其上使用缓存,例如

           mWebView.getSettings().setAppCacheMaxSize(1024*1024*8);
           mWebView.getSettings().setAppCachePath(""+this.getCacheDir());
           mWebView.getSettings().setAppCacheEnabled(true); 
           mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
    

    别忘了添加以下权限

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- for the connection status-->
    

    来源: https://stackoverflow.com/a/6503817/1309629

    【讨论】:

    • 为什么是Java和android?
    • 因为我正在使用 jquery mobile 用 HTML 构建整个东西,并通过 phonegap 发布它,因此没有原生 android kt ios prohrammimg 所以没有 java 仅 java 脚本
    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多