現在、私はAndroidアプリケーションを開発しており、インターネットから取得したxmlフィードを使用しています.問題は、電話にインターネット接続がない場合、アプリケーションがクラッシュすることです. xml ファイルを取得してアセットに入れたいと思います。
私の質問は:それは可能ですか?はいの場合、それを行うための最良の解決策は何ですか?
ネットワーク接続を確認します。
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;
}
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;
}
文字列を 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)
{
}
}
}
このメソッドをアクティビティに追加します。
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;
}