1

現在、私はAndroidアプリケーションを開発しており、インターネットから取得したxmlフィードを使用しています.問題は、電話にインターネット接続がない場合、アプリケーションがクラッシュすることです. xml ファイルを取得してアセットに入れたいと思います。

私の質問は:それは可能ですか?はいの場合、それを行うための最良の解決策は何ですか?

4

3 に答える 3

3
  1. ネットワーク接続を確認します。

        public static boolean isConnectedToInternet(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null)
        {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
                for (int i = 0; i < info.length; i++)
                    if (info[i].getState() == NetworkInfo.State.CONNECTED)
                    {
                        return true;
                    }
        }
        return false;
    }
    
  2. XML 文字列をダウンロード

      public String getXMLString(String url) {
    
        try
        {
            URL url1 = new URL(url);
            URLConnection tc = url1.openConnection();
            tc.setConnectTimeout(timeout);
            tc.setReadTimeout(timeout);
            BufferedReader br = new BufferedReader((new InputStreamReader(tc.getInputStream())));
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            br.close();
            return sb.toString();
        } catch (Exception e)
        {
            Log.d("Error", "In XMLdownloading");
        }
    
        return null;
    }
    
  3. 文字列を SD カードの任意のディレクトリに保存します。

       private void writeStringToTextFile(String s, String f) {
    
        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File(sdCard.getAbsolutePath());
        dir.mkdirs();
    
        File file = new File(dir, f);
        try
        {
            FileOutputStream f1 = new FileOutputStream(file, false);
            PrintStream p = new PrintStream(f1);
            p.print(s);
            p.close();
            f1.close();
        } catch (FileNotFoundException e)
        {
        } catch (IOException e)
        {
        }
        }
        }
    
于 2013-04-18T09:42:36.863 に答える
2

このメソッドをアクティビティに追加します。

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager
            .getActiveNetworkInfo();
    return activeNetworkInfo != null;
}

onCreate で、または次のようにフィード チェックをロードする前に:

        if (!isNetworkAvailable()) {
            Toast.makeText(
                    Player.this,
                    "No active internet connection found.",
                    Toast.LENGTH_LONG).show();
            finish();
            return;
        }
于 2013-04-18T09:29:46.770 に答える