在活动之间传递字符串

时间:2012-03-19 14:05:25

标签: android

您好我正在尝试在两个不同的活动之间传递一个字符串(我是Android新手)

当我运行这个程序时它会继续强制关闭,请有人告诉我我做错了什么吗?我感觉我还没有正确理解意图的基本原理。我也觉得我可能试图同时运行2个意图,这可能会导致问题。感谢您提供任何帮助。

package com.intent.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Intenttest extends Activity {
    /** Called when the activity is first created. */

    Button button1;
    TextView text1;
    String tests="hello there my friend";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        button1 =(Button)findViewById(R.id.button1);
        text1=(TextView)findViewById(R.id.text1);


        button1.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {
                try{
                    Bundle b = new Bundle();
                    b.putString("key", tests);
                    Intent i = new Intent(Intenttest.this,DataPass.class);
                    i.putExtras(b);
                    startActivity(i);
                    text1.setText(tests);
                }catch(Exception e){
                    text1.setText("Error2");
                }

                // TODO Auto-generated method stub
                try{
                    Class rClass = Class.forName("com.intent.test." +"DataPass");
                    Intent ourIntent = new Intent(Intenttest.this,rClass);
                    startActivity(ourIntent);
                }catch(Exception e){
                    text1.setText("Error");
                }

            }
        });

    }
}



package com.intent.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class DataPass extends Activity{

        Button button2;
        String tests;
        TextView text2;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.datapass);

            button2 =(Button)findViewById(R.id.button2);

            try{
                Bundle gotb = getIntent().getExtras();
              tests =gotb.getString("key");

             text2.setText(""+tests);
            }catch(Exception e){
                text2.setText("error");
            }

            button2.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub


                    try{
                        Class rClass = Class.forName("com.intent.test." +"Intenttest");
                        Intent ourIntent = new Intent(DataPass.this,rClass);
                        startActivity(ourIntent);
                    }catch(Exception e){

                    }
                }
            });
      }
}

3 个答案:

答案 0 :(得分:0)

你不应该两次运行活动。

删除 Intenttest 类中的以下内容:

// TODO Auto-generated method stub
try{
   Class rClass = Class.forName("com.intent.test." +"DataPass");
   Intent ourIntent = new Intent(Intenttest.this,rClass);
   startActivity(ourIntent);
}catch(Exception e){
   text1.setText("Error");
}

将其置于 catch

button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try{
                Bundle b = new Bundle();
                b.putString("key", tests);
                Intent i = new Intent(Intenttest.this,DataPass.class);
                i.putExtras(b);
                startActivity(i);
                text1.setText(tests);
            }catch(Exception e){
                text1.setText("Error2");

                try{
                  Class rClass = Class.forName("com.intent.test." +"DataPass");
                  Intent ourIntent = new Intent(Intenttest.this,rClass);
                  startActivity(ourIntent);
                }catch(Exception e){
                  text1.setText("Error");
                }
            }
        }
    });

答案 1 :(得分:0)

你应该使用intent extras。

你可以毫无问题地放置原语,对于你需要使用“Parcelable”的更复杂的对象(你的数据对象应该实现它)。

How do I get extra data from intent on Android?

答案 2 :(得分:0)

您可以将其作为意图中包含的额外数据传递。如果您的源活动,请执行此操作,

Intent i = new Intent(this, TargetActivity.class);
i.putExtra("myKey", myVal);
startActivity(i);

并在目标活动中

Intent i = getIntent();
String myVal = i.getStringExtra("myKey");