如何从android中的其他活动获取数据?

时间:2011-01-25 11:16:16

标签: android android-intent

我有两个活动,例如Activity A和B,我尝试使用BundlestartActivity(intent)将两个不同的字符串从A传递到B.

就像那样:

Intent intent = new Intent(A.this, B.class);
Bundle bundle = new Bundle();
bundle.putString("vidoedetails", filedetails);
//bundle.putString("videoname", filename);


intent.putExtras(bundle);
//intent.putExtra("videofilename", filename);
//intent.putExtra("vidoefiledetails", filedetails);
startActivity(intent);

在B组中,我使用两个TextView来分别显示A类的字符串。

就像那样:

Intent i = getIntent();
Bundle extras = i.getExtras();

filedetails = extras.getString("videodetails");
filename = extras.getString("videoname");

问题是filedetils在B类打印,但不是文件名。

对此有何解决方案?

5 个答案:

答案 0 :(得分:18)

你有一个错字:

bundle.putString("vidoedetails", filedetails);

应该是

bundle.putString("videodetails", filedetails);

答案 1 :(得分:9)

我知道我在这个答案上迟了9天,但这是我创建常量类的一个很好的例子。使用常量类,如果它拼写错误(“视频” - >“vidoe”)并不重要,因为当您通过一个众所周知的位置引用它时,它将在两个地方“拼错”。

Constants.java

public static String WELL_KNOWN_STRING "org.example.stackoverflow.4792829";

Activity1.java

bundle.putString(Constants.WELL_KNOWN_STRING, filedetails);

Activity2.java

filedetails = extras.getString(Constants.WELL_KNOWN_STRING);        

答案 2 :(得分:2)

是的,你拼写错误的视频尾迹:
你的:vid * OE *详情
正确:vid * EO *详情

答案 3 :(得分:0)

// First activity
actvty_btn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {               
        Intent i = new Intent(v.getContext(),SECONDACTIVITY.class);    
        startActivityForResult(i, STATIC_INTEGER_VALUE);
    }
});

/* This function gets the value from the other activity where we have passed a value on calling this activity */ 
public void activity_value() {
    Intent i = getIntent();
    Bundle extras=i.getExtras();
    if(extras !=null) {
        // This is necessary for the retrv_value
        rtrv_value = extras.getString("key");

        if(!(rtrv_value.isEmpty())) {
            // It displays if the retrieved value is not equal to zero
            myselection.setText("Your partner says = " + rtrv_value);
        }
    }
}


// Second activity
myBtn.setOnClickListener(new View.OnClickListener () {
    public void onClick(View v) {
        Intent intent = new Intent(v.getContext(), FIRSTACTIVITY.class);
        Bundle bundle = new Bundle();
        bundle.putString("key", txt1.getText().toString());
        // Here key is just the "Reference Name" and txt1 is the EditText value
        intent.putExtras(bundle);               
        startActivity(intent);
    }
});

答案 4 :(得分:0)

这是在Activities之间传递数据的另一种方法。这只是我所遵循的教程中的一个示例。我有一个运行5秒钟的启动画面,然后它会从以下内容中删除声音剪辑:

@Override
protected void onPause() {
    super.onPause();
    ourSong.release();
}

我决定我希望声音片段继续播放到下一个活动,同时仍然可以从那里杀死/释放它,所以我制作了声音片段,MediaPlayer对象,公共和静态,类似于在System中的方式。 out是一个公共静态对象。作为Android开发人员的新手,但不是Java dev的新手,我这样做了。

import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;

public class Splash extends Activity {

    public static MediaPlayer ourSong; // <----- Created the object to be shared
                                        // this way

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        ourSong = MediaPlayer.create(Splash.this, R.raw.dubstep);
        ourSong.start();
        Thread timer = new Thread() {
            public void run() {
                try {
                    sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    Intent openStartingPoint = new Intent(
                            "expectusafterlun.ch.androidtutorial.MENU");
                    startActivity(openStartingPoint);
                }
            }
        };
        timer.start();
    }
}

然后,从下一个活动或任何其他活动,我可以访问该MediaPlayer对象。

public class Menu extends ListActivity {

    String activities[] = { "Count", "TextPlay", "Email", "Camera", "example4",
            "example5", "example6" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(Menu.this,
                android.R.layout.simple_expandable_list_item_1, activities));
    }

    @Override
    protected void onPause() {
        super.onPause();
        Splash.ourSong.release(); // <----- Accessing data from another Activity
                                    // here
    }

}