7

ファイルを処理した後、画像が次のように設定された HTML 文字列を取得します

<img src="abc.001.png" width="135" height="29" alt="" style="margin-left:0pt; margin-top:0pt; position:absolute; z-index:-65536" />

リストからファイル項目を選択する必要があるため、画像のパスは変更しないでください。画像はファイルと同じディレクトリにあります。loadData/loadDataWithBaseURL を使用して HTML 文字列を読み込みましたが、画像が表示されません。枠しか見えない。

どうすればこれを修正できますか? そして、 .001.jpg 、 .002.png などとしてインデックス付けされた多くの画像がある場合に、そのソリューションを適用できますか? (すべてディレクトリ内)?

更新:ありがとう、画像の名前に関係なく、loadUrl() ステートメントで動作します。実際、コンテンツを WebView にロードする前に、コンテンツを読み取って処理する必要があります。そのため、loadDataWithBaseUrl() ステートメントを使用して、上記の問題が発生します。Test.html のコンテンツを読み取って表示するテスト プロジェクトのコードを次に示します。

    String res = "";        
    File file = new File(Environment.getExternalStorageDirectory()+"/Test.html");
    try {
        FileInputStream in = new FileInputStream(file);

        if (in != null) {               
            BufferedReader buffreader = new BufferedReader(
                    new InputStreamReader(in));
            String line;
            while ((line = buffreader.readLine()) != null) {
                res += line;
            }
            in.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }       
    wv.loadDataWithBaseURL(null, res, "text/html", "utf-8", null);
  //wv.loadUrl("file://"+Environment.getExternalStorageDirectory()+"/Test.html");

// のステートメントは機能しますが、それは私の実際のプロジェクトでできることではありません。私には解決策があります。コンテンツを処理した後、一時的な HTML ファイルに保存してからロードする必要があります。そのファイルは後で削除されます。しかし、私はまだより良い解決策を楽しみにしています:)

4

4 に答える 4

9

画像ファイルの名前を変更してみてください。これは、名前に二重ドットがあるためだと思いました。

<img id="compassRose" src="CompassRose.jpg"></img>

これは私のために働いています....

コード:

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.WebView;

public class StackOverFlowActivity extends Activity {

    private Handler mHandler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        WebView view=(WebView)findViewById(R.id.webView1);
        view.getSettings().setJavaScriptEnabled(true);
        view.loadUrl("file:///android_asset/index.html");
        view.addJavascriptInterface(new MyJavaScriptInterface(), "Android");
    }

    final class MyJavaScriptInterface
    {
        public void ProcessJavaScript(final String scriptname, final String args)
            {             
                mHandler.post(new Runnable()
                    {
                        public void run()
                            {
                                //Do your activities
                            }
                    });
            }
    }
}

index.html:

<html>
<head>
  <title title="Index"></title>                                   
</head>

<body>
  <h2>Android App demo</h2>
  <br /> <img src="CompassRose.jpg" />
</body>
</html>

ここに画像の説明を入力

結果:

ここに画像の説明を入力

于 2012-05-22T11:44:22.837 に答える
3

単に使用します:

webview.loadUrl("file:///android_asset/mypicture.jpg");
于 2016-04-23T07:18:11.297 に答える
1

あなたの問題は次の行にあります:

wv.loadDataWithBaseURL(null, res, "text/html", "utf-8", null);

最初のパラメーター (baseURL) は null です。何らかの理由で、WebView は、絶対 URL を使用している場合でも、リンクされたリソースの読み込みを拒否します。コードを次のように変更すると、機能することがわかる場合があります (画像が外部ディレクトリに保存されていると仮定します)。

wv.loadDataWithBaseURL ("file://" + Environment.getExternalStorageDirectory(), res, "text/html", "utf-8", null);

ネットワーク上のリソースを参照する場合は、適切な権限を忘れずに追加してください。

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

すみません、返事が少し遅くなりました。この投稿に出くわしたとき、私は同様の問題を調査していました。

于 2013-10-09T12:19:50.333 に答える