目前我正在開發一個android應用程序,我使用的是我從互聯網上取得的xml文件。問題是當我的手機沒有互聯網連接,我的應用程序崩潰。我想獲得我的XML文件並將其放入資產。從互聯網上取得一個XML資訊提供,並把它放在我的資產
我的問題是:有可能嗎?如果是的話,那麼最好的解決方案是什麼?
目前我正在開發一個android應用程序,我使用的是我從互聯網上取得的xml文件。問題是當我的手機沒有互聯網連接,我的應用程序崩潰。我想獲得我的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;
}
編寫XML文件或在運行時assets
文件夾中的所有文件是不可能的。 res
文件夾中的文件夾或資源是「只讀」但是,您可以在應用程序的內部數據文件夾中編寫XML文件。
只需使用Context.openFileInput(String)
和Context.openFileOutput(String, int)
即可。 Here
更新1:
這個問題可能出現在你的腦海。
"If I write an XML file on my app's data folder, how to parse it?"
您可以使用XMLPullParser
類解析XML文件。這裏有一個例子
XMLPullParser parser = Xml.newPullParser();
parser.setInput(new InputStreamReader(openFileInput("my_XML_file.xml")));
我使用SAX parser.will這是一個問題?我是否必須更改我的代碼才能使其工作或者是否有其他解決方案? – user2184060
我對SAX Parser沒有任何經驗。我看過它的一個例子。如果你使用'InputSource'對象,你可以這樣做'inputSource.setCharacterStream(new InputStreamReader(openFileInput(「my_XML_file.xml」)))' – Geros