2012-03-27 35 views
0

我有一个CustomWebViewClass:似乎无法通过PARAMS同构造函数

import android.app.Activity; 
import android.content.Intent; 

import android.os.Bundle; 
import android.view.Window; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

public class CustomWebView extends Activity{ 

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

     Intent intent = getIntent(); 
     String url = intent.getStringExtra("url"); 

     WebView webview = new WebView(this); 
     setContentView(webview); 
     webview.getSettings().setJavaScriptEnabled(true); 

     //progress bar optional 
     getWindow().requestFeature(Window.FEATURE_PROGRESS); 

     final Activity activity = this; 
     Toast.makeText(activity, "YO! " + url, Toast.LENGTH_SHORT).show(); 
     webview.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 
       // Activities and WebViews measure progress with different scales. 
       // The progress meter will automatically disappear when we reach 100% 
       activity.setProgress(progress * 1000); 
      } 
     }); 
     webview.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     webview.loadUrl(url); 
    } 
} 

从另一个类(本质上是一个按钮)我想调用这个类的意图传递给它的URL像这样:

Intent webView = new Intent(getContext(), CustomWebView.class); 
webView.putExtra("url", "http://google.com"); 
webView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getContext().startActivity(webView); 

但我得到一个黑屏或一个错误。显然,我做错了什么,请帮助

哦,我的表现有这样的:

<activity android:name=".CustomWebView" 
    android:label="CustomWebView" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:screenOrientation="landscape"> 
    <intent-filter> 
     <action android:name="com.sapientnitro.lcinstore2.CUSTOMWEBVIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

回答

0

当您在Intent通过params,你可以用getIntent().getExtra[...]

检索该试试这个:

import android.app.Activity; 

import android.view.Window; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

public class CustomWebView extends Activity{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     String url = getIntent().getStringExtra("url"); 

     //super.onCreate(savedInstanceState); 


     WebView webview = new WebView(this); 
     setContentView(webview); 
     //progress bar optional 
     getWindow().requestFeature(Window.FEATURE_PROGRESS); 
     // alllow js 
     webview.getSettings().setJavaScriptEnabled(true); 

     final Activity activity = this; 
     Toast.makeText(activity, "YO! " + url, Toast.LENGTH_SHORT).show(); 
     webview.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 
      // Activities and WebViews measure progress with different scales. 
      // The progress meter will automatically disappear when we reach 100% 
      activity.setProgress(progress * 1000); 
      } 
     }); 
     webview.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     webview.loadUrl(url); 



    } 


} 
+0

感谢我试着但有些东西仍然是错误的,因为我得到这个错误:03-27 10:50:30.240:E/Android运行时(6073):java.lang.RuntimeException:无法实例化活动ComponentInfo {com.sapientnitro.lcinstore2/com.sapientnitro.lcinstore2.CustomWebView}:java.lang.InstantiationException:com.sapientnitro.lcinstore2.CustomWebView – erik 2012-03-27 15:50:25

+0

似乎是最终的问题是:getWindow()。requestFeature(Window.FEATURE_PROGRESS);在内容之前被调用?我刚刚评论它,现在它的作品.. – erik 2012-03-27 16:22:14

0

你不带参数调用它,你开始的活动,并把意图捆绑包中的额外字符串,您永远不会使用该捆绑包。

你需要像这样在CustomWebView开头:

Bundle extras = getIntent().getExtras(); 
String url = extras.getString("url"); 
0

你似乎误解了活动的构造函数及其onCreate()方法之间的差异。

当您显式创建一个新对象时,会调用构造函数;

Activity customWebView = new CustomWebView(url); 

这可能不是您想要创建新活动的方式。相反,你想使用意图系统(这是你已经开始做)。

Intent webView = new Intent(getContext(), CustomWebView.class); 
webView.putExtra("url", "http://google.com"); 
webView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getContext().startActivity(webView); 

使用意图,系统会调用一个空的构造,然后一旦该活动已创建,将调用onCreate()方法,你应该重写。从这里开始,您可以访问您用来启动Activity的Intent,并且可以获取您作为参数传递的URL。

你可能想要的东西,看起来像这样:

public class CustomWebView extends Activity { 

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

     Intent intent = getIntent(); 
     String url = intent.getStringExtra("url"); 

     //Do stuff with your URL 
    } 
} 
+0

我更新了我的代码以上反映您的答案,并得到此错误:03-27 10:59:17.830:E/AndroidRuntime(6870):java.lang。RuntimeException:无法启动活动ComponentInfo {com.sapientnitro.lcinstore2/com.sapientnitro.lcinstore2.CustomWebView}:android.util.AndroidRuntimeException:requestFeature()必须在添加内容之前调用 03-27 10:59:17.830:E/AndroidRuntime(6870):导致:android.util.AndroidRuntimeException:在添加内容之前必须调用requestFeature() – erik 2012-03-27 16:00:42

+0

错误是在添加内容之前必须调用requestFeature()。在调用setContentView(webview)之前,必须调用getWindow()。requestFeature(Window.FEATURE_PROGRESS);' – theisenp 2012-03-27 17:04:46

1

requestFeature()应该setContentView之前调用:

...

this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 
setContentView(webview); 

...