Android的 - 送活动之间串Android

2023-09-12 06:02:13 作者:无人及你

即时遇到了麻烦一个字符串(包含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 =htt​​p://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);

    sea​​rchText =(TextView中)findViewById(R.id.searchText);
    sea​​rchResultText =(TextView中)findViewById(R.id.searchResultText);

    sea​​rchButton =(按钮)findViewById(R.id.searchButton);
    sea​​rchButton.setOnClickListener(本);

}

@覆盖
公共无效的onClick(查看buttonId){
    // TODO自动生成方法存根
    开关(buttonId.getId()){
    案例R.id.searchButton:
        zoekopdracht = searchText.getText()的toString()。

        StringBuilder的completeURL =新的StringBuilder(的baseUrl);
        completeURL.append(zoekopdracht + endURL);
        sea​​rchUrl = 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();
                }
            }
          })。开始();
        sea​​rchResultText.setText(completeTrailerUrl);
        //我想completeTrailerUrl在web视图加载
        打破;
    }
}
}
 
如何对付毒瘤 Android 应用后台活动

在反应桶

我已经改变了接收到的类,但我认为这是我要去的地方错了。

 公共类FavoriteActivity延伸活动{
的WebView web视图;
字符串URL;

公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.favoritepage);

    //部分提交的酷编译
    意图T = getIntent();
    束k = t.getExtras();
    URL = k.getString(stringToPassOn);

    如果(网址!= NULL){
        URL =htt​​p://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;
    }
}
}

In reaction to Barrel

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");

 
精彩推荐
图片推荐