0

リモート サーバーから XML ファイルを読み取り、Android デバイスで XML のデータを置き換える必要がある場合があります。XmlPullParser を介してデータを読み取ります。

XmlPullParser users;
            try {
                URL xmlUrl = new URL("http://xx.xx.xx.xx/1.xml");
                users = XmlPullParserFactory.newInstance().newPullParser();
                users.setInput(xmlUrl.openStream(), null);

            }

Androidでそれを置き換えるにはどうすればよいですか?

4

1 に答える 1

0

このコードを使用するだけで、インターネットからダウンロードした新しいファイルでファイルが上書きされます。

public static boolean downloadFile(String fileToDownload, File newPath,
            String newFileName) {
        try {
            URL url = new URL(fileToDownload);
            HttpURLConnection urlConnection = (HttpURLConnection) url
                    .openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoOutput(true);
            urlConnection.connect();
            if (!newPath.isDirectory()) {

                CreateLog.createFolder(newPath.toString());
            }
            File file = new File(newPath.toString() + "/" + newFileName);
            if (!file.isFile()) {
                CreateLog.writeLogToFile(newPath.toString() + newFileName,
                        "%TEMP%");
            }

            FileOutputStream fileOutput = new FileOutputStream(file);
            InputStream inputStream = urlConnection.getInputStream();

            byte[] buffer = new byte[1024];
            int bufferLength = 0;

            while ((bufferLength = inputStream.read(buffer)) > 0) {
                fileOutput.write(buffer, 0, bufferLength);
            }
            fileOutput.close();
            return true;

        } catch (MalformedURLException e) {
            CreateLog.addToLog(e.toString());
            return false;
        } catch (IOException e) {
            CreateLog.addToLog(e.toString());
            return false;
        }
    }

public static void createFolder(String filePath) {
    File createFolder = new File(filePath);
    createFolder.mkdirs();
}

よりクリーンな方法は、Asynctaskを使用することです。コードは新しいスレッドで実行されます。しかし、コード化するのは少し難しいです。

private class GetProblems extends AsyncTask<String, Integer, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {
            for (String myUrl : params) {

                try {

                    URL url = new URL(myUrl);
                    URLConnection ucon = url.openConnection();
                    ucon.setRequestProperty("Accept", "application/xml");

                    InputStream is = ucon.getInputStream();
                    BufferedInputStream bis = new BufferedInputStream(is);

                    ByteArrayBuffer baf = new ByteArrayBuffer(50);
                    int current = 0;
                    while ((current = bis.read()) != -1) {
                        baf.append((byte) current);
                    }
                    String str = new String(baf.toByteArray(), "UTF8");

                    return str;

                } catch (MalformedURLException e) {
                    CreateLog.addToLog("[GetProblems] " + e.toString());
                } catch (IOException e) {
                    CreateLog.addToLog("[GetProblems] " + e.toString());
                }
            }
            return "error";
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            // updateProgressBar(values[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

                        ...write result to a file

        }
    }

AsyncTask コードを実行します。

new GetProblems().execute("http://myurl.com/xmlfile.xml");
于 2012-12-10T08:14:29.733 に答える