2012-07-05 4 views
3

지금 저는 책 스택으로 작동하는 앱에서 작업하고 있습니다. 여기서 사용자는 자신이 선택한 책을 읽을 수 있으며, 내가하고있는 일은 웹에서 볼 수있는 HTML 페이지를 표시하는 것입니다. 내 신청서에. 이제이 응용 프로그램은 사용자가 전화기에서 풀 타임 인터넷에 연결되어있는 경우에만 작동합니다. 내가 원하는 것은 응용 프로그램을 처음 열 때 인터넷 연결이 필요할 때 응용 프로그램이 해당 페이지를 다운로드하여 로컬 데이터베이스에 저장하여 사용자가 나중에 인터넷에 연결하지 않고 읽을 수 있어야한다는 것입니다. html 페이지를 다운로드하여 로컬 데이터베이스에 저장할 수 있으므로 인터넷에 연결되어 있지 않아도 사용자가 응용 프로그램을 사용할 수 있습니까? 필요한 경우 여기에 내 코드를 게시 할 수 있습니다. 내가 오랫동안 지금부터 여기 붙어로 :(.HTML 페이지/파일을 Android의 애플리케이션 데이터베이스에 저장하는 방법은 무엇입니까?

EDIT 1을 모든 작은 팁 또는 도움이 정말 좋은 것 :

그래서 내가 성공적으로 웹 사이트에서 HTLM 페이지,하지만 지금은 문제를 다운로드하는 나는 다운로드 HTML의 이미지 중 하나를 볼 수 없습니다, IS에 직면하고있다. 이에 대한 적절한 해결책? "로컬 데이터베이스"의 의미는 무엇 여기

+0

다운로드 된 콘텐츠를 저장하려면 파일을 사용하십시오. – adatapost

답변

2

? 할 수있는 일

선호하는 방법은 내부 저장소(/<data/data/<application_package_name>) (기본적으로 루트가 아닌 기기의 경우 애플리케이션 전용) 또는 외부 저장소(public access)에 페이지를 다운로드하는 것이 가장 좋습니다. 그런 다음 사용자 장치가 인터넷에 연결되어 있지 않으면 해당 저장 영역의 페이지를 참조하십시오 (offline mode).

업데이트 : 1

는 해당 페이지를 저장하려면 당신은 안드로이드에 간단한 File 읽기/쓰기 작업을 할 수 있습니다. 예를 들어

:

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

이 예제 저장소 파일 hello_file 응용 프로그램의 내부 저장 디렉토리입니다.

업데이트 : 2 다운로드 웹 컨텐츠 이제 당신은 그래서 내 갱신 한 코드를 사용하여, 결과 파일에 변수를 쓰기

변수 결과에로드 된 전체 HTML을 //

HttpClient httpClient = new DefaultHttpClient(); 
HttpContext localContext = new BasicHttpContext(); 
HttpGet httpGet = new HttpGet("http://www.xxxx.com"); 
HttpResponse response = httpClient.execute(httpGet, localContext); 
String result = ""; 

BufferedReader reader = new BufferedReader(
    new InputStreamReader(
     response.getEntity().getContent() 
    ) 
); 

String line = null; 
while ((line = reader.readLine()) != null){ 
    result += line + "\n"; 
} 

. 단순 .. :-)

귀하의 안드로이드 응용 프로그램의 매니 페스트 파일에이 두 가지 권한을 추가하는 것을 잊지 마십시오.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
+0

그래, 정확히 그걸하고 싶지만 어떻게 하나의 웹 페이지를 다운로드 할 수 있습니까? www.mytestpage.com/story1.htm을 다운로드하고 싶습니다. 샘플 코드를 게시 할 수 있습니까? 나는이 분야에서 아직 초보자이며, 어떤 도움도 정말로 감사 할 것입니다. :) – ark

+0

그래,이 페이지를 성공적으로 다운로드했지만 지금은 내가 직면 한 문제는 오프라인 모드에서 이미지를 볼 수 없다는 것인데,이 문제에 대한 해결책이 있습니까? 원인 이미지는 내 응용 프로그램에서 가장 중요한 부분입니다. – ark

+0

@ark 같은 m 문제가 있습니다.이 문제와 관련된 솔루션이 있습니까? –

1

웹 페이지 다운로드 코드 스 니펫. 코드의 주석을 확인하십시오. 즉 www.mytestpage.com/story1과 같은 링크 만 제공하면됩니다.기능에 대한 다운로드 링크로 htm

void Download(String downloadlink,int choice) 
{ 
    try { 
     String USERAGENT; 
     if(choice==0) 
     { 
      USERAGENT ="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17"; 
     } 
     else 
     { 
      USERAGENT ="Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; ADR6300 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17"; 
     } 
     URL url = new URL(downloadlink); 
     //create the new connection 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
     //set up some things on the connection 
     urlConnection.setRequestProperty("User-Agent", USERAGENT); //if you are not sure of user agent just set choice=0 
     urlConnection.setRequestMethod("GET"); 
     urlConnection.setDoOutput(true); 
     urlConnection.connect(); 

     //set the path where we want to save the file 
     File SDCardRoot = Environment.getExternalStorageDirectory(); 
     File dir = new File (SDCardRoot.getAbsolutePath() + "/yourfolder"); 
     if(!dir.exists()) 
     { 
     dir.mkdirs(); 
     } 
     File file = new File(dir, "filename"); //any name abc.html 

     //this will be used to write the downloaded data into the file we created 
     FileOutputStream fileOutput = new FileOutputStream(file); 

     //this will be used in reading the data from the internet 
     InputStream inputStream = urlConnection.getInputStream(); 

     //this is the total size of the file 
     int totalSize = urlConnection.getContentLength(); 
     //variable to store total downloaded bytes 
     int downloadedSize = 0; 

     //create a buffer... 
     byte[] buffer = new byte[1024]; 
     int bufferLength = 0; //used to store a temporary size of the buffer 

     //write the contents to the file 
     while ((bufferLength = inputStream.read(buffer)) > 0) { 
      fileOutput.write(buffer, 0, bufferLength); 
     } 
     //close the output stream when done 
     fileOutput.close(); 
     inputStream.close(); 
     urlConnection.disconnect(); 

    //catch some possible errors... 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

그래,이 페이지를 성공적으로 다운로드했지만 지금은 내가 직면 한 문제는 오프라인 모드에서 이미지를 볼 수 없다는 것인데이 문제에 대한 해결책이 있습니까? 원인 이미지는 내 응용 프로그램에서 가장 중요한 부분입니다. – ark

+0

문제는 URL에서 다운로드하려고 할 때마다 이미지가 아닌 HTML 페이지를 다운로드한다는 것입니다. 이 작업을 수행하려면이 작업을 수행하는 라이브러리 나 htmlparser를 사용하는 내 솔루션을 검색해야합니다.

관련 문제