即时遇到了麻烦一个字符串(包含URL)从一个活动到另一个。 我已经使用意图尝试,但没有成功。
我有一个主要的活动设置了标签的tabhost。 有3个选项卡,一个带有酒吧code扫描仪,一个具有搜索字段和一个web视图。
酒吧code扫描和搜索栏创建包含一个URL我希望web视图显示的字符串。
可能有人请告诉我,我失去了一些东西或者我怎么能做到这一点更好?
我的主要活动
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
setTabs();
}
私人无效setTabs()
{
addTab(家,R.drawable.tab_home,HomeActivity.class);
addTab(搜索,R.drawable.tab_search,SearchActivity.class);
addTab(播放,R.drawable.tab_favorite,FavoriteActivity.class);
}
私人无效addTab(字符串labelId,INT drawableId,类<> C)
{
TabHost tabHost = getTabHost();
意向意图=新的意图(这一点,C);
TabHost.TabSpec规格= tabHost.newTabSpec(标签+ labelId);
查看tabIndicator = LayoutInflater.from(本).inflate(R.layout.tab_indicator,getTabWidget(),FALSE);
TextView的标题=(TextView中)tabIndicator.findViewById(R.id.title);
title.setText(labelId);
ImageView的图标=(ImageView的)tabIndicator.findViewById(R.id.icon);
icon.setImageResource(drawableId);
spec.setIndicator(tabIndicator);
spec.setContent(意向);
tabHost.addTab(规范);
}
公共无效switchTab(INT标签){
TabHost tabHost1 = getTabHost();
tabHost1.setCurrentTab(标签);
}
web视图标签
公共类WebviewActivity延伸活动{
的WebView web视图;
字符串URL;
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.favoritepage);
URL =http://www.google.nl;
web视图=(web视图)findViewById(R.id.webview);
webView.getSettings()setJavaScriptEnabled(真)。
webView.setWebChromeClient(新WebChromeClient());
webView.setWebViewClient(新WebViewClient(){
@覆盖
公共无效onReceivedError(web视图来看,INT错误code,字符串描述,字符串failingUrl)
{
//处理错误
}
@覆盖
公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL)
{
view.loadUrl(URL);
返回true;
}
});
。webView.getSettings()setPluginState(WebSettings.PluginState.ON);
。webView.getSettings()setAllowFileAccess(真正的);
webView.getSettings()setDefaultZoom(WebSettings.ZoomDensity.FAR)。
webView.loadUrl(URL);
如果(savedInstanceState!= NULL)
((web视图)findViewById(R.id.webview))restoreState(savedInstanceState)。
}
保护无效的onSaveInstanceState(包outState){
webView.saveState(outState);
}
}
和搜索选项卡
公共类SearchActivity扩展活动实现OnClickListener {
按钮searchButton;
TextView的searchText;
TextView的searchResultText;
字符串zoekopdracht,completeTrailerUrl,searchUrl;
字符串的baseUrl =HTTP:// not_needed_here;
字符串endURL =End_of_url;
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.searchpage);
searchText =(TextView中)findViewById(R.id.searchText);
searchResultText =(TextView中)findViewById(R.id.searchResultText);
searchButton =(按钮)findViewById(R.id.searchButton);
searchButton.setOnClickListener(本);
}
@覆盖
公共无效的onClick(查看buttonId){
// TODO自动生成方法存根
开关(buttonId.getId()){
案例R.id.searchButton:
zoekopdracht = searchText.getText()的toString()。
StringBuilder的completeURL =新的StringBuilder(的baseUrl);
completeURL.append(zoekopdracht + endURL);
searchUrl = completeURL.toString();
/ **开始日线OM德XML zoekopdracht TE DOEN * /
新主题(新的Runnable(){
公共无效的run(){
尝试 {
URL网址=新的URL(searchUrl);
的SAXParserFactory SPF = SAXParserFactory.newInstance();
的SAXParser藻= spf.newSAXParser();
XMLReader的XR = sp.getXMLReader();
HandlingXMLStuff doingWork =新HandlingXMLStuff();
xr.setContentHandler(doingWork);
InputSource的是=新的InputSource(website.openStream());
xr.parse(是);
completeTrailerUrl = doingWork.getInformation();
}赶上(例外五){
// TODO自动生成的catch块
e.printStackTrace();
}
}
})。开始();
searchResultText.setText(completeTrailerUrl);
//我想completeTrailerUrl在web视图加载
打破;
}
}
}
我已经改变了接收到的类,但我认为这是我要去的地方错了。
公共类FavoriteActivity延伸活动{
的WebView web视图;
字符串URL;
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.favoritepage);
//部分提交的酷编译
意图T = getIntent();
束k = t.getExtras();
URL = k.getString(stringToPassOn);
如果(网址!= NULL){
URL =http://www.google.nl;
}
web视图=(web视图)findViewById(R.id.webview);
webView.getSettings()setJavaScriptEnabled(真)。
webView.setWebChromeClient(新WebChromeClient());
webView.setWebViewClient(新WebViewClient(){
@覆盖
公共无效onReceivedError(web视图来看,INT错误code,字符串描述,字符串failingUrl)
{
//处理错误
}
@覆盖
公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL)
{
view.loadUrl(URL);
返回true;
}
});
。webView.getSettings()setPluginState(WebSettings.PluginState.ON);
。webView.getSettings()setAllowFileAccess(真正的);
webView.getSettings()setDefaultZoom(WebSettings.ZoomDensity.FAR)。
webView.loadUrl(URL);
如果(savedInstanceState!= NULL)
((web视图)findViewById(R.id.webview))restoreState(savedInstanceState)。
}
保护无效的onSaveInstanceState(包outState){
webView.saveState(outState);
}
}
运行这个时候,web视图是全黑和旋转崩溃
06-22 13:32:45.380:W / dalvikvm(1630):主题ID = 1:螺纹退出与未捕获的异常(组= 0x40a51228)
06-22 13:32:45.400:E / AndroidRuntime(1630):致命异常:主要
06-22 13:32:45.400:E / AndroidRuntime(1630):java.lang.RuntimeException的:无法停止活动{com.georgekroon.player / com.georgekroon.player.TUplayerV2Activity}:java.lang.RuntimeException的:无法启动活动ComponentInfo {com.georgekroon.player / com.georgekroon.player.FavoriteActivity}:显示java.lang.NullPointerException
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3505)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3585)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3783)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread.access $ 700(ActivityThread.java:139)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1266)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.os.Handler.dispatchMessage(Handler.java:99)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.os.Looper.loop(Looper.java:156)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread.main(ActivityThread.java:5005)
06-22 13:32:45.400:E / AndroidRuntime(1630):在java.lang.reflect.Method.invokeNative(本机方法)
06-22 13:32:45.400:E / AndroidRuntime(1630):在java.lang.reflect.Method.invoke(Method.java:511)
06-22 13:32:45.400:E / AndroidRuntime(1630):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
06-22 13:32:45.400:E / AndroidRuntime(1630):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-22 13:32:45.400:E / AndroidRuntime(1630):在dalvik.system.NativeStart.main(本机方法)
06-22 13:32:45.400:E / AndroidRuntime(1630):java.lang.RuntimeException的:产生的原因无法启动活动ComponentInfo {com.georgekroon.player / com.georgekroon.player.FavoriteActivity}:java.lang中。空指针异常
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2202)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread.startActivityNow(ActivityThread.java:1992)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.LocalActivityManager.dispatchStop(LocalActivityManager.java:579)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityGroup.onStop(ActivityGroup.java:82)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1266)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.Activity.performStop(Activity.java:4706)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3500)
06-22 13:32:45.400:E / AndroidRuntime(1630):12 ...更多
06-22 13:32:45.400:E / AndroidRuntime(1630):由:显示java.lang.NullPointerException
06-22 13:32:45.400:E / AndroidRuntime(1630):在com.georgekroon.player.FavoriteActivity.onCreate(FavoriteActivity.java:25)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.Activity.performCreate(Activity.java:4543)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
06-22 13:32:45.400:E / AndroidRuntime(1630):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2158)
06-22 13:32:45.400:E / AndroidRuntime(1630):19 ...更多
解决方案
使用包。
在您的活动中加入类似
捆绑包=新包();
bundle.putSerializable(stringToPassOn,YOUR_STRING);
意图XXX;
xxx.putExtras(包);
startActivityForResult(XXX,0);
和您通过检索后面的信息:
捆绑包= this.getIntent()getExtras()。
会将myText的String =(字符串)bundle.getSerializable(stringToPassOn);
im having trouble getting a string (containing a URL) from one activity to another. I've tried using intent but that didn't work.
I've got a main activity setting up the tabhost with tabs. There are 3 tabs, one with a barcode scanner, one with a search field and a webview.
The barcode scanner and search field create a string containing a Url i want the webview to show.
Could someone please tell me I'm missing something or how i could do this better?
My main activity
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTabs() ;
}
private void setTabs()
{
addTab("Home", R.drawable.tab_home, HomeActivity.class);
addTab("Search", R.drawable.tab_search, SearchActivity.class);
addTab("Play", R.drawable.tab_favorite, FavoriteActivity.class);
}
private void addTab(String labelId, int drawableId, Class<?> c)
{
TabHost tabHost = getTabHost();
Intent intent = new Intent(this, c);
TabHost.TabSpec spec = tabHost.newTabSpec("tab" + labelId);
View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);
TextView title = (TextView) tabIndicator.findViewById(R.id.title);
title.setText(labelId);
ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon);
icon.setImageResource(drawableId);
spec.setIndicator(tabIndicator);
spec.setContent(intent);
tabHost.addTab(spec);
}
public void switchTab(int tab){
TabHost tabHost1 = getTabHost();
tabHost1.setCurrentTab(tab);
}
The webview tab
public class WebviewActivity extends Activity {
WebView webView;
String url;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favoritepage);
url = "http://www.google.nl";
webView = (WebView)findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
// Handle the error
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
});
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
webView.loadUrl(url);
if (savedInstanceState != null)
((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState);
}
protected void onSaveInstanceState(Bundle outState) {
webView.saveState(outState);
}
}
and the search tab
public class SearchActivity extends Activity implements OnClickListener {
Button searchButton;
TextView searchText;
TextView searchResultText;
String zoekopdracht, completeTrailerUrl, searchUrl;
String baseURL = "http://not_needed_here";
String endURL = "End_of_url";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.searchpage);
searchText=(TextView)findViewById(R.id.searchText);
searchResultText=(TextView)findViewById(R.id.searchResultText);
searchButton=(Button)findViewById(R.id.searchButton);
searchButton.setOnClickListener(this);
}
@Override
public void onClick(View buttonId) {
// TODO Auto-generated method stub
switch (buttonId.getId()){
case R.id.searchButton :
zoekopdracht = searchText.getText().toString();
StringBuilder completeURL = new StringBuilder(baseURL);
completeURL.append(zoekopdracht + endURL);
searchUrl = completeURL.toString();
/**start de thread om de xml zoekopdracht te doen */
new Thread(new Runnable() {
public void run() {
try {
URL website = new URL(searchUrl);
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
HandlingXMLStuff doingWork = new HandlingXMLStuff();
xr.setContentHandler(doingWork);
InputSource is=new InputSource(website.openStream());
xr.parse(is);
completeTrailerUrl = doingWork.getInformation();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
searchResultText.setText(completeTrailerUrl);
//I want completeTrailerUrl to be loaded in the webview
break;
}
}
}
I've changed the receiving class into this, but i think this is where i'm going wrong.
public class FavoriteActivity extends Activity {
WebView webView;
String url;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favoritepage);
// part submitted by Cool Compiler
Intent t=getIntent();
Bundle k = t.getExtras();
url=k.getString("stringToPassOn");
if (url != null){
url = "http://www.google.nl";
}
webView = (WebView)findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
// Handle the error
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
});
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
webView.loadUrl(url);
if (savedInstanceState != null)
((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState);
}
protected void onSaveInstanceState(Bundle outState) {
webView.saveState(outState);
}
}
when running this, the webview is all black and on rotate it crashes
06-22 13:32:45.380: W/dalvikvm(1630): threadid=1: thread exiting with uncaught exception (group=0x40a51228)
06-22 13:32:45.400: E/AndroidRuntime(1630): FATAL EXCEPTION: main
06-22 13:32:45.400: E/AndroidRuntime(1630): java.lang.RuntimeException: Unable to stop activity {com.georgekroon.player/com.georgekroon.player.TUplayerV2Activity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.georgekroon.player/com.georgekroon.player.FavoriteActivity}: java.lang.NullPointerException
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3505)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3585)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3783)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread.access$700(ActivityThread.java:139)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1266)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.os.Handler.dispatchMessage(Handler.java:99)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.os.Looper.loop(Looper.java:156)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread.main(ActivityThread.java:5005)
06-22 13:32:45.400: E/AndroidRuntime(1630): at java.lang.reflect.Method.invokeNative(Native Method)
06-22 13:32:45.400: E/AndroidRuntime(1630): at java.lang.reflect.Method.invoke(Method.java:511)
06-22 13:32:45.400: E/AndroidRuntime(1630): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-22 13:32:45.400: E/AndroidRuntime(1630): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-22 13:32:45.400: E/AndroidRuntime(1630): at dalvik.system.NativeStart.main(Native Method)
06-22 13:32:45.400: E/AndroidRuntime(1630): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.georgekroon.player/com.georgekroon.player.FavoriteActivity}: java.lang.NullPointerException
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2202)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1992)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.LocalActivityManager.dispatchStop(LocalActivityManager.java:579)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityGroup.onStop(ActivityGroup.java:82)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1266)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.Activity.performStop(Activity.java:4706)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3500)
06-22 13:32:45.400: E/AndroidRuntime(1630): ... 12 more
06-22 13:32:45.400: E/AndroidRuntime(1630): Caused by: java.lang.NullPointerException
06-22 13:32:45.400: E/AndroidRuntime(1630): at com.georgekroon.player.FavoriteActivity.onCreate(FavoriteActivity.java:25)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.Activity.performCreate(Activity.java:4543)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
06-22 13:32:45.400: E/AndroidRuntime(1630): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2158)
06-22 13:32:45.400: E/AndroidRuntime(1630): ... 19 more
解决方案
Use a Bundle.
In your activity add something like
Bundle bundle = new Bundle ();
bundle.putSerializable("stringToPassOn", YOUR_STRING);
Intent xxx;
xxx.putExtras (bundle);
startActivityForResult (xxx, 0);
And you retrieve the information later on via:
Bundle bundle = this.getIntent().getExtras();
String myText = (String) bundle.getSerializable ("stringToPassOn");