2

我试图在 webview 中显示图像,但我的应用程序一旦到达加载 webview 的活动就会崩溃。

    WebView myWebView = (WebView) findViewById(R.id.webView1);
    myWebView.getSettings().setJavaScriptEnabled(true);
 //   myWebView.getSettings().setBuiltInZoomControls(true);
 //   myWebView.getSettings().setSupportZoom(true);
    myWebView.loadUrl("http://www.de-saksen.nl/2/images/comprofiler/62_4dc3051f2b262.jpg");
 //     myWebView.loadData(
 //            "<img src='http://www.de-saksen.nl/2/images/comprofiler/62_4dc3051f2b262.jpg'>",
 //            "text/html", "UTF-8");

我一直对代码感到困惑,但没有任何帮助。

该活动位于 Manifest.xml 中,它允许 Internet 权限。

编辑:阅读你所有的遮阳篷有很大帮助,并注意到如果我将代码放在一个新活动中,图像就会加载,但我需要能够在这个活动中加载它:

public class Profileviewer extends ListActivity {


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

 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);


    setContentView(R.layout.listplaceholder);


    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();


    JSONObject json = JSONfunctions.getJSONfromURL("http://de-saksen.nl/deelnemers.txt");



    try{

        JSONArray  deelnemers = json.getJSONArray("deelnemers");

        int Key = getIntent().getIntExtra("Key", -1);

            { HashMap<String, String> map = new HashMap<String, String>();  
            JSONObject e = deelnemers.getJSONObject(Key);

            map.put("id",  String.valueOf(Key));
            map.put("name", "Naam: " +  e.getString("naamingw2"));
            map.put("sex", "Geslacht: " +  e.getString("geslacht"));
            map.put("rank", "Rang: " +  e.getString("rang"));
            map.put("race", "Ras: " +  e.getString("ras"));
            map.put("profession", "Beroep: " +  e.getString("beroep"));
            map.put("skills", "Hobby's: " +  e.getString("hobbys"));
            map.put("lvl", "Level: " +  e.getString("level"));
            map.put("avatar", e.getString("avatar"));
            mylist.add(map);            
        }   



    }catch(JSONException e)        {
         Log.e("log_tag", "Error parsing data "+e.toString());
    }

    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.profile, 
                    new String[] { "name", "sex", "rank", "race", "profession", "skills", "lvl" }, 
                    new int[] { R.id.item_title, R.id.item_subtitle, R.id.item_subtitle2, R.id.item_subtitle3, R.id.item_subtitle4, R.id.item_subtitle5, R.id.item_subtitle6 });

    setListAdapter(adapter);




    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);  
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
            Intent intent = new Intent(Profileviewer.this, Listviewer.class);   
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
            startActivity(intent); 
        }
    });



}
}

因为在这个活动中我有当前选定的用户。

4

4 回答 4

2

用这个

byte[] imageRaw = null;
try {
 URL url = new URL("http://some.domain.tld/somePicture.jpg");
 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

 InputStream in = new BufferedInputStream(urlConnection.getInputStream());
 ByteArrayOutputStream out = new ByteArrayOutputStream();

 int c;
 while ((c = in.read()) != -1) {
     out.write(c);
 }
 out.flush();

 imageRaw = out.toByteArray();

 urlConnection.disconnect();
 in.close();
 out.close();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }

  String image64 = Base64.encodeToString(imageRaw, Base64.DEFAULT);

  String urlStr   = "http://example.com/my.jpg";
  String mimeType = "text/html";
  String encoding = null;
  String pageData = "<img src=\"data:image/jpeg;base64," + image64 + "\" />";

  WebView wv;
  wv = (WebView) findViewById(R.id.webview);
  wv.loadDataWithBaseURL(urlStr, pageData, mimeType, encoding, urlStr);
于 2012-07-30T12:25:30.183 回答
1
 public class WebviewActivity extends Activity {         
           public void onCreate(Bundle savedInstanceState) {
                   super.onCreate(savedInstanceState);        
           setContentView(R.layout.main);        

     WebView wv = (WebView) findViewById(R.id.webview1);        
           WebSettings webSettings = wv.getSettings();        
           webSettings.setBuiltInZoomControls(true);        
           wv.loadUrl("http://ecx.images-amazon.com/images/I/41HGB-W2Z8L._SL500_AA300_.jpg");

     }    

}

xml

<?xml version="1.0" encoding="utf-8" ?> 
  <LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"   
android:layout_width="fill_parent" 
android:layout_height="fill_parent"   
android:orientation="vertical">
  <WebView 
    android:id="@+id/webview1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
 </LinearLayout>
于 2012-07-30T12:27:26.960 回答
0
 public class WebviewActivity extends Activity {     
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);        

  WebView wv = (WebView) findViewById(R.id.webview1);   
    WebSettings webSettings = wv.getSettings(); 
    webSettings.setBuiltInZoomControls(true);   
    wv.loadUrl("http://ecx.images-amazon.com/images/I/41HGB-W2Z8L._SL500_AA300_.jpg");

  }    

 }
于 2012-07-30T12:24:01.410 回答
0

我刚刚在模拟器上运行了该代码,它工作得很好。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

</LinearLayout>

Android 3.2 不需要启动 AsyncTasks。

于 2012-07-30T12:22:51.657 回答