1

目前我正在开发一个 android 应用程序,我正在使用从互联网获取的 xml 提要。问题是当我的手机没有互联网连接时,我的应用程序崩溃了。我想获取我的 xml 文件并将其放入资产中。

我的问题是:有可能吗?如果是的话,最好的解决方案是什么?

4

3 回答 3

5

在运行时编写 xml 文件或文件assets夹中的任何文件是不可能的。文件夹中的文件夹或资源res“只读的”,但您可以在应用程序的内部数据文件夹中写入 XML 文件。

只需使用Context.openFileInput(String)and Context.openFileOutput(String, int)这里

更新 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")));
于 2013-04-18T09:34:51.670 回答
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 回答