0

このリンクの本文を String HTML に格納してから WebView にロードしようとしています。(コードの解析は Jsoup で行われます)。ボタンを押すと、デバッガーにString HTML = re.fixCode(); と表示されます。「デバッグ現在の命令ポインター」と表示されます。

文字列をメソッドに渡したり、文字列をそのまま渡したりするなど、多くのことを試しました。しかし、同じことが何度も起こります。私の結論は、メソッド/変数を他のクラスに渡さないということですか? (最後のビットを理解していただければ幸いです)

その場合、どうすればそれらにアクセスできますか? インテントを通して?

明確にするために、本文を取得して文字列に渡し、WebView に読み込みます。ありがとう!

メインクラス

public class MainActivity extends Activity {

    private String uri = "http://www.novasoftware.se/webviewer/%28S%28muz0tu55twfd43zkqrlejb55%29%29/design1.aspx?schoolid=18200&code=83310";
    private RequestTask re;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button b = (Button) findViewById(R.id.button1);
        final WebView web = (WebView) findViewById(R.id.webView1);
        WebSettings webSettings = web.getSettings();
        webSettings.setJavaScriptEnabled(true);



        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new RequestTask().execute(uri);
                loadWeb();
            }
        });

    }

    private void loadWeb() {
        **String HTML = re.fixCode();**
        System.out.println(HTML);
        //      web.loadData(re.fixedHtml, "text/html", null);
    }
}

RequestTask クラス

package com.dir.schema;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import android.os.AsyncTask;

public class RequestTask extends AsyncTask<String, String, String>{

    public String html, fixedHtml;

    @Override
    protected String doInBackground(String... uri) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response;
        String responseString = null;
        try {
            response = httpclient.execute(new HttpGet(uri[0]));
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                out.close();
                responseString = out.toString();
            } else{
                //Closes the connection.
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
        } catch (ClientProtocolException e) {
            //TODO Handle problems..
        } catch (IOException e) {
            //TODO Handle problems..
        }
        return responseString;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        //Do anything with response..
        html = result;
        fixCode();
    }

    public String fixCode() {
        Document doc = Jsoup.parse(html);
        return fixedHtml = doc.body().toString();

    }

    }
4

1 に答える 1

0

re.fixCode()を呼び出していますが、reは何も設定されていません。この時点でヌル ポインター エラーが発生していると思います。

onClick()メソッドを次のように書き換えたいと思います。

public void onClick(View v) {
    re = new RequestTask();
    re.execute(uri);
    loadWeb();
}
于 2013-08-15T01:12:01.510 に答える