2011-02-27 8 views
0

AndroidでHTMLファイルを取得するプログラムを作成していますが、実行すると強制終了します。私は何が間違っているのか分からない!ここでは、コードのいくつかのブロックは、以下のとおりです。AndroidでHTMLファイルを取得するのに役立つ

文字列に変換ファイル:

public String getFileAsString(File file){ FileInputStream fis = null; 
     BufferedInputStream bis = null; 
     DataInputStream dis = null; 
     StringBuffer sb = new StringBuffer(); 
     try { 
     fis = new FileInputStream(file); 
     bis = new BufferedInputStream(fis); 
     dis = new DataInputStream(bis); 

     while (dis.available() != 0) { 
     sb.append(dis.readLine() +"\n"); 
     } 
     fis.close(); 
     bis.close(); 
     dis.close(); 

     } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
     return sb.toString(); 
     } 

Then where the problem might be: 

    File htmlfile = null; 
       EditText text = (EditText)findViewById(R.id.editText1); 
       TextView tv =(TextView)findViewById(R.id.textView2); 
       String data; 
      URL url = null; 
      try { 
       url = new URL(text.getText().toString()); 
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       tv.setText("Invalid URL"); 
      } 
      try { 
       download(url,htmlfile); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       tv.setText("Something went wrong try reinstalling the program!"); 
      } 

      data = getFileAsString(htmlfile); 
      tv.setText(data); 

その他のコード:

private static void download(URL input, File output) 
    throws IOException { 
    InputStream in = input.openStream(); 
    try { 
    OutputStream out = new FileOutputStream(output); 
    try { 
     copy(in, out); 
    } finally { 
     out.close(); 
    } 
    } finally { 
    in.close(); 
    } 
} 

private static void copy(InputStream in, OutputStream out) 
    throws IOException { 
    byte[] buffer = new byte[1024]; 
    while (true) { 
    int readCount = in.read(buffer); 
    if (readCount == -1) { 
     break; 
    } 
    out.write(buffer, 0, readCount); 
    } 
} 


} 

Logcat:

02-26 18:47:43.571: ERROR/AndroidRuntime(275): FATAL EXCEPTION: main 
02-26 18:47:43.571: ERROR/AndroidRuntime(275): java.lang.NullPointerException: Argument must not be null 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at java.io.FileInputStream.<init>(FileInputStream.java:78) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at com.apps.blogspot.blogspot.getFileAsString(blogspot.java:40) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at com.apps.blogspot.blogspot.onClick(blogspot.java:83) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at android.view.View.performClick(View.java:2408) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at android.view.View$PerformClick.run(View.java:8816) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at android.os.Handler.handleCallback(Handler.java:587) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at android.os.Looper.loop(Looper.java:123) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at dalvik.system.NativeStart.main(Native Method) 
02-26 18:47:43.661: WARN/ActivityManager(38): Force finishing activity com.apps.blogspot/.blogspot 
02-26 18:47:44.261: WARN/ActivityManager(38): Activity pause timeout for HistoryRecord{43e2ec30 com.apps.blogspot/.blogspot} 
02-26 18:47:44.901: INFO/ARMAssembler(38): generated scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x360050:0x36010c] in 6934332 ns 
02-26 18:47:44.941: INFO/ARMAssembler(38): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x360110:0x3602d8] in 2187014 ns 
02-26 18:47:48.831: INFO/Process(275): Sending signal. PID: 275 SIG: 9 
02-26 18:47:48.871: INFO/ActivityManager(38): Process com.apps.blogspot (pid 275) has died. 
02-26 18:47:48.871: INFO/WindowManager(38): WIN DEATH: Window{43fd01f8 com.apps.blogspot/com.apps.blogspot.blogspot paused=false} 
02-26 18:47:48.911: WARN/InputManagerService(38): Got RemoteException sending setActive(false) notification to pid 275 uid 10036 
02-26 18:47:55.766: WARN/ActivityManager(38): Activity destroy timeout for HistoryRecord{43e2ec30 com.apps.blogspot/.blogspot} 

答えて

1

htmlfilenullです:あなたは割り当てることはありませんその価値。ここで

は、あなたがスタックトレースからそれを把握する方法は次のとおりです。トレースの上から

02-26 18:47:43.571: ERROR/AndroidRuntime(275): java.lang.NullPointerException: Argument must not be null 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at java.io.FileInputStream.<init>(FileInputStream.java:78) 
02-26 18:47:43.571: ERROR/AndroidRuntime(275):  at com.apps.blogspot.blogspot.getFileAsString(blogspot.java:40) 

、あなたがあなたのgetFileAsString方法でFileInputStreamを構築NullPointerExceptionを持っている参照してください。

data = getFileAsString(htmlfile); 

そして何かがhtmlfileに割り当てられている場所を探して、あなただけ見つける:

それはパラメータfileはそう見て、発信者を探して、nullであることでなければならない

File htmlfile = null; 
+0

ありがとうございました。私はこのようなことにかなり新しいです(ファイルストリーム)。助けてくれてありがとう! –

関連する問題