1

URLソースからhtmlファイルを読み込もうとしていますが、nullpointerexceptionが発生します。これが私のコードです:

public class NetworkThread extends AsyncTask<String, Integer, String> {

    URL url;
    StringBuffer sb;
    InputStream is;


    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        String webUrl = etUrl.getText().toString();
        try {
            url = new URL(webUrl);
            BufferedReader in = new BufferedReader(
            new InputStreamReader(url.openStream()));
            String htmlLine;
            while ((htmlLine = in.readLine()) != null) 
                sb.append(htmlLine);

            in.close();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "Bad URL";
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "Input / Output";
        } catch (NullPointerException e) {
            e.printStackTrace();
            return "Null";
        }
        return sb.toString();
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        html.setText(result);
    }

}

このプログラムを通常のJavaで実行してみました-URLをハードコーディングすると、正常に実行されます。

ただし、Androidで実行すると、TextViewに「Null」メッセージが表示されます。

LogCatによると、NullPointerExceptionはsb.append(htmlLine)からのものです。

4

2 に答える 2

1

StringBufferオブジェクトを初期化していません。

StringBuffer sb = new StringBuffer();

このコードを試して、URLからコンテンツを読み取ることもできます。

public class ReadWebpageAsyncTask extends Activity {
  private TextView textView;


/** Called when the activity is first created. */

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textView = (TextView) findViewById(R.id.TextView01);
  }

  private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
      String response = "";
      for (String url : urls) {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {
          HttpResponse execute = client.execute(httpGet);
          InputStream content = execute.getEntity().getContent();

          BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
          String s = "";
          while ((s = buffer.readLine()) != null) {
            response += s;
          }

        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      return response;
    }

    @Override
    protected void onPostExecute(String result) {
      textView.setText(result);
    }
  }

  public void readWebpage(View view) {
    DownloadWebPageTask task = new DownloadWebPageTask();
    task.execute(new String[] { "http://www.stackoverflow.com" });

  }
} 
于 2012-08-23T00:07:02.880 に答える
0

LogCatは、NullPointerExceptionがからのものであると言いsb.append(htmlLine);ます。

sb初期化しないため、nullです。追加してみてください:

StringBuffer sb = new StringBuffer();
于 2012-08-23T00:03:12.430 に答える