2014-01-24 8 views
0

все.WebView не показывает контент

У меня возникли проблемы с отображением содержимого URL-адреса, полученного из поля EditText, в WebView на Android.

Я просто хочу добавить String, вставленную в поле EditText, чтобы открыть URL-адрес другого действия, где открывается веб-браузер с поисковым URL-адресом Google, ища данный текст в EditText.

Это мой MainActivity:

package com.hbt.activities; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.View; 
import android.webkit.WebView; 
import android.widget.EditText; 

public class MainActivity extends Activity { 

    EditText term; 
    String query; 
    WebView intview; 

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

    term = (EditText) findViewById(R.id.searchtext); 
    query = term.getText().toString(); 

    intview = (WebView) findViewById(R.id.webView1); 
    intview.getSettings().setBuiltInZoomControls(true); 
    intview.getSettings().setJavaScriptEnabled(true); 
    intview.getSettings().setDomStorageEnabled(true); 
} 

public void openWikipedia(View intview){ 

    Intent intent = new Intent(this, Wikipedia.class); 
    intent.putExtra("query", query); 
    startActivity(intent); 
    } 

public void openGoogle(View view){ 

    Intent intent = new Intent(this, Google.class); 
    intent.putExtra("query", query); 
    startActivity(intent); 
    } 
} 

Это мой Google.java:

package com.hbt.activities; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.KeyEvent; 
import android.view.View; 
import android.webkit.WebView; 
import android.widget.Toast; 

public class Google extends Activity { 
String query; 
WebView intview; 

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

public void opengoogle (View webView1){ 
    intview = (WebView) findViewById(R.id.webView1); 
    intview.getSettings().setBuiltInZoomControls(true); 
    intview.getSettings().setJavaScriptEnabled(true); 
    intview.getSettings().setDomStorageEnabled(true); 
    intview.loadUrl("https://www.google.pt"); 

    String query = ""; 

    Bundle bundle = getIntent().getExtras(); 
    if (bundle == null){ 
     Toast.makeText(getApplicationContext(), "Insert a search item.",Toast.LENGTH_LONG).show(); 
    } 
    if (bundle != null) { 
     query = bundle.getString("query"); 
    } 


} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK){ 
     onBackPressed(); 
     return true; 
    } 
    else{ 
     return super.onKeyDown(keyCode, event); 
    } 
} 
} 

И, наконец, Wikipedia.java:

package com.hbt.activities; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.webkit.WebView; 
import android.widget.Toast; 

public class Wikipedia extends Activity { 

    String query; 
WebView intview; 

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

public void openWikipedia (View view){ 
    intview = (WebView) findViewById(R.id.webView1); 
    intview.getSettings().setBuiltInZoomControls(true); 
    intview.getSettings().setJavaScriptEnabled(true); 
    intview.getSettings().setDomStorageEnabled(true); 

    String query = ""; 
    Bundle bundle = getIntent().getExtras(); 
    if (bundle == null){ 
     Toast.makeText(getApplicationContext(), "Insert a search item.",Toast.LENGTH_LONG).show(); 
    } 
    if (bundle != null) { 
     query = bundle.getString("query"); 
    } 

    String url = "en.wikipedia.org/wiki/Special:Search?search="+ query; 
    Intent i = new Intent(Intent.ACTION_VIEW); 
    i.setData(Uri.parse(url)); 
    startActivity(i); 

} 

    @Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK){ 
     onBackPressed(); 
     return true; 
    } 
    else{ 
     return super.onKeyDown(keyCode, event); 
    } 
} 
} 

Я действительно не могу понять, почему WebView не показывает контент. Любая помощь будет чрезвычайно оценена. Заранее спасибо.

Как спросил, здесь идет макет XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 



<Button 
    android:id="@+id/Wikipedia" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/Google" 
    android:layout_alignLeft="@+id/Google" 
    android:layout_alignRight="@+id/Google" 
    android:minEms="6" 
    android:onClick="openWikipedia" 
    android:text="@string/wikipedia" /> 

<Button 
    android:id="@+id/Google" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:onClick="openGoogle" 
    android:text="@string/google" /> 

<EditText 
    android:id="@+id/searchtext" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/Wikipedia" 
    android:layout_alignLeft="@+id/Wikipedia" 
    android:layout_alignRight="@+id/Google" 
    android:layout_marginBottom="18dp" 
    android:layout_marginTop="12dp" 
    android:hint="@string/text_to_search_" /> 

<WebView 
    android:id="@+id/webView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/searchtext" 
    android:layout_alignLeft="@+id/searchtext" 
    android:layout_alignParentTop="true" /> 

</RelativeLayout> 

Следующая раскладка XML Википедия:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<WebView 
    android:id="@+id/webView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    /> 

</RelativeLayout> 

и Google XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<WebView 
    android:id="@+id/webView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentTop="true" /> 

</RelativeLayout> 

Они отличаются, потому что я пытался подойти к делу с нескольких фронтов.

+0

ли вы добавляете разрешение INTERNET к манифесту вашего приложения? – tiguchi

+0

Да, да. Добавлен рядом с тегом . – HBT

+0

Он просто показывает пустой экран. Я вижу элементы управления Zoom, когда я нажимаю на представление, но ничего не загружается. – HBT

ответ

1

Хорошо. Единственное, что вам нужно, это MainActivity и main_activity.xml.

Остальные вещи вам не нужны, насколько я могу судить.

Вот код листинг MainActivity:

public class MainActivity extends Activity { 

    EditText term; 
    String query; 
    WebView intview; 

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

     term = (EditText) findViewById(R.id.searchtext); 
     query = term.getText().toString(); 

     intview = (WebView) findViewById(R.id.webView1); 
     intview.getSettings().setBuiltInZoomControls(true); 
     intview.getSettings().setJavaScriptEnabled(true); 
     intview.getSettings().setDomStorageEnabled(true); 
    } 

    public void openWikipedia(View intview) { 
     String url = "http://en.wikipedia.org/wiki/" + query; 
     this.intview.loadUrl(url); 
    } 

    public void openGoogle(View view) { 
     String url = "https://www.google.pt?q="+query; 
     this.intview.loadUrl(url); 
    } 
} 

Теперь макет основного вида деятельности в. Никаких изменений не требуется по сравнению с оригиналом, который у вас есть. Но, для ясности, я отправляю его.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 



<Button 
    android:id="@+id/Wikipedia" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/Google" 
    android:layout_alignLeft="@+id/Google" 
    android:layout_alignRight="@+id/Google" 
    android:minEms="6" 
    android:onClick="openWikipedia" 
    android:text="Wikipedia" /> 

<Button 
    android:id="@+id/Google" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:onClick="openGoogle" 
    android:text="Google" /> 

<EditText 
    android:id="@+id/searchtext" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/Wikipedia" 
    android:layout_alignLeft="@+id/Wikipedia" 
    android:layout_alignRight="@+id/Google" 
    android:layout_marginBottom="18dp" 
    android:layout_marginTop="12dp" 
    android:hint="Text to search" /> 

<WebView 
    android:id="@+id/webView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/searchtext" 
    android:layout_alignLeft="@+id/searchtext" 
    android:layout_alignParentTop="true" /> 

</RelativeLayout> 

Теперь, когда вы нажимаете кнопку, Google или Wikipedia, ваш WebView должен начать загрузку отображения содержимого на нем. Дайте ему немного времени.

Для Википедии: Я заметил, что у него есть перенаправления, поэтому, наконец, он откроет новый URL-адрес в браузере по умолчанию. Вам нужно будет справиться с этим.

Для Google: URL-адрес, вероятно, не настроен правильно, но вы можете изучить его.

Тем не менее, основная проблема WebView не должна быть исправлена.

-------------------- Обновление ------------------------- ------

Теперь измените эти вещи:

MainActivity.class

public class MainActivity extends Activity { 

    EditText term; 
    String query; 
    WebView intview; 

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

     term = (EditText) findViewById(R.id.searchtext); 
     query = term.getText().toString(); 

     intview = (WebView) findViewById(R.id.webView1); 
     intview.getSettings().setBuiltInZoomControls(true); 
     intview.getSettings().setJavaScriptEnabled(true); 
     intview.getSettings().setDomStorageEnabled(true); 
    } 

    public void openWikipedia(View intview) { 
     String url = "http://en.wikipedia.org/wiki/" + query; 
     this.intview.loadUrl(url); 
    } 

    public void openGoogle(View view) { 
     Intent intent = new Intent(this, Google.class); 
     intent.putExtra("query", term.getText().toString()); 
     startActivity(intent); 
    } 
} 

Google.class

public class Google extends Activity { 
    String query; 
    WebView intview; 

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

    public void opengoogle() { 
     intview = (WebView) findViewById(R.id.webView1); 
     intview.getSettings().setBuiltInZoomControls(true); 
     intview.getSettings().setJavaScriptEnabled(true); 
     intview.getSettings().setDomStorageEnabled(true); 
     intview.loadUrl("https://www.google.pt"); 

     String query = ""; 

     Bundle bundle = getIntent().getExtras(); 
     if (bundle == null) { 
      Toast.makeText(getApplicationContext(), "Insert a search item.", 
        Toast.LENGTH_LONG).show(); 
     } 
     if (bundle != null) { 
      query = bundle.getString("query"); 
      intview.loadUrl("http://www.google.com?q=" + query); 
     } 

    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      onBackPressed(); 
      return true; 
     } else { 
      return super.onKeyDown(keyCode, event); 
     } 
    } 
} 
+0

Прямо на месте. Теперь я только сталкиваюсь с проблемой, когда я нахожусь в активности Google, если я нажму одну из кнопок, приложение выйдет из строя. – HBT

0

Добавьте это внутри своих методов onclick, чтобы получить текущее значение EditText, перед отправкой намерения: query = term.getText(). ToString();

public void openWikipedia(View intview){ 
    query = term.getText().toString(); 
    Intent intent = new Intent(this, Wikipedia.class); 
    intent.putExtra("query", query); 
    startActivity(intent); 
    } 

public void openGoogle(View view){ 
    query = term.getText().toString(); 
    Intent intent = new Intent(this, Google.class); 
    intent.putExtra("query", query); 
    startActivity(intent); 
    } 

Настроенный webviews в OnCreate():

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

    intview = (WebView) findViewById(R.id.webView1); 
    intview.getSettings().setBuiltInZoomControls(true); 
    intview.getSettings().setJavaScriptEnabled(true); 
    intview.getSettings().setDomStorageEnabled(true); 
    intview.loadUrl("https://www.google.pt"); 

    String query = ""; 

    Bundle bundle = getIntent().getExtras(); 
    if (bundle == null){ 
     Toast.makeText(getApplicationContext(), "Insert a search item.",Toast.LENGTH_LONG).show(); 
    } 
    if (bundle != null) { 
     query = bundle.getString("query"); 
    } 

} 

Это должно работать.

+0

Цените помощь, но не идете. Веб-просмотр пуст. И у меня был term.getText(). ToString() в методе onCreate. – HBT

+0

В методах oncreate вы также должны настроить веб-представления. – brwngrldev

+0

Изменения еще нет. Я видел некоторые проблемы с кодом, но я действительно не могу понять, с чего начать. Я считаю, что у него не должно было быть openwikipedia() как на mainActivity, так и на WikipediaActivity. Но я не могу понять, где и как дать webview адрес, который я хочу. – HBT

Смежные вопросы