无法将值从一个意图传递到另一个意图
Posted
技术标签:
【中文标题】无法将值从一个意图传递到另一个意图【英文标题】:Can't pass values from one intent to another 【发布时间】:2015-07-11 14:02:33 【问题描述】:这是我将值传递给名为choice的类的主要活动。
@Override
public void onClick(View v)
// TODO Auto-generated method stub
String x="";
for(int i=0;i<count;i++)
x+=songf[i]+" ";
Toast.makeText(getApplicationContext(), x, Toast.LENGTH_SHORT).show();
Choice o = new Choice();
o.initializeit(songf,sizef,linkf,indexf,count);
Intent ix=new Intent("com.example.harmony.CHOICE");
startActivity(ix);
/*public void doit()
Choice o = new Choice();
o.initializeit(songf,sizef,linkf,indexf,count);
*/
这是班级选择
public class Choice extends Activity implements OnClickListener
Button b;
RadioButton rb1,rb2,rb3,rb4 ;
RadioGroup rg;
static String[] songf = new String[19];
static Integer[] indexf = new Integer[19];
static String[] linkf = new String[19];
static double[] sizef = new double[19];
static int count;
public static void initializeit(String[] song, double[] size, String[] link,Integer[] index, int c)
// TODO Auto-generated method stub
songf=song;
sizef=size;
indexf=index;
linkf=link;
count=c;
String x="";
//x+=Integer.toString(count);
//Toast.makeText(getApplicationContext(), x, Toast.LENGTH_SHORT).show();
//for(int i=0;i<count;i++)
//
// x+=songf[i]+" ";
//
// Toast.makeText(getApplicationContext(), x, Toast.LENGTH_SHORT).show();
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.choice);
b = (Button) findViewById(R.id.download);
rg = (RadioGroup) findViewById(R.id.radioGroup1);
rb1 = (RadioButton) findViewById(R.id.fcfs);
rb2 = (RadioButton) findViewById(R.id.sjf);
rb3 = (RadioButton) findViewById(R.id.priority);
b.setOnClickListener(this);
MainActivity o = new MainActivity();
o.doit();
@Override
public void onClick(View v)
// TODO Auto-generated method stub
if(rb1.isChecked())
for(int i=0;i<count;i++)
for(int j=0;j<count-i-1;j++)
if(indexf[j]>indexf[j+1])
int temp1=indexf[j];
indexf[j]=indexf[j+1];
indexf[j+1]=temp1;
String temp2=linkf[j];
linkf[j]=linkf[j+1];
linkf[j+1]=temp2;
String temp3=songf[j];
songf[j]=songf[j+1];
songf[j+1]=temp3;
double temp4=sizef[j];
sizef[j]=sizef[j+1];
sizef[j+1]=temp4;
String x="";
for(int i=0;i<count;i++)
x+=songf[i]+" ";
Toast.makeText(getApplicationContext(), x, Toast.LENGTH_SHORT).show();
else if(rb2.isChecked())
for(int i=0;i<count;i++)
for(int j=0;j<count-i-1;j++)
if(sizef[j]>sizef[j+1])
double temp1=sizef[j];
sizef[j]=sizef[j+1];
sizef[j+1]=temp1;
String temp2=linkf[j];
linkf[j]=linkf[j+1];
linkf[j+1]=temp2;
String temp3=songf[j];
songf[j]=songf[j+1];
songf[j+1]=temp3;
int temp4=indexf[j];
indexf[j]=indexf[j+1];
indexf[j+1]=temp4;
String x="";
for(int i=0;i<count;i++)
x+=songf[i]+" ";
x+=Integer.toString(count)+songf[0]+indexf[0];
Toast.makeText(getApplicationContext(), x, Toast.LENGTH_SHORT).show();
else if(rb3.isChecked())
String x="";
for(int i=0;i<count;i++)
x+=songf[i]+" ";
Toast.makeText(getApplicationContext(), x, Toast.LENGTH_SHORT).show();
在 initializeit 中初始化的字符串值未初始化并给我空值。我无法理解这个问题。请帮帮我。
【问题讨论】:
为什么不在对象的构造函数中初始化? 【参考方案1】:你应该这样传递数据:
Intent intent = new Intent(this, Choice.class);
intent.putExtra("fname", "My first name");
intent.putExtra("lname", "My last name");
startActivity(intent);
并以这种方式检索Choice.class
中的数据:
Intent intent = getIntent();
String fName = intent.getStringExtra("fname");
String lName = intent.getStringExtra("lname");
使用方法putExtra("key", value);
和getExtra("key");
并且您不应该创建任何 Activity
的实例,除非您想在那里导航。查看更多详情doc。
【讨论】:
要传递一个数组,我只需键入intent.putExtra("fname",songf[]); ? 是的,您肯定可以这样做。只有一件事,如果你想通过Object
,你需要将它包裹在Bundle
.developer.android.com/reference/android/os/Bundle.html和Bundle
的例子***.com/questions/768969/…中
别担心。无论如何。如果它确实解决了问题,请接受答案,所以问题将被关闭:)【参考方案2】:
使用 putExtra()
将数据从一个 Activity
传递给另一个
intent.putExtra("KEY", "DATA_TO_BE_SENT");
在您的第二个活动中,您必须使用检索值
getIntent().getStringExtra("KEY");
因此,在您的代码中,
Choice o = new Choice();
o.initializeit(songf,sizef,linkf,indexf,count);
Intent ix=new Intent("com.example.harmony.CHOICE");
startActivity(ix);
必须替换为
Intent ix=new Intent("com.example.harmony.CHOICE");
intent.putExtra("KEY", "DATA_TO_BE_SENT");
startActivity(ix);
【讨论】:
【参考方案3】:如果你想将一些数据从一个活动传输到另一个活动,你必须使用 Intent。
Intent intent = new Intent(this, Choice.class);
**intent.putExtra()** // insert here your data !
startActivity(intent);
搜索更多与此意图相关的内容。putExtra 在此处http://developer.android.com/training/basics/firstapp/starting-activity.html
【讨论】:
【参考方案4】:共享元素必须通过 Intent.putExtra 传递
发送:
Intent i = new Intent(this, ActivityTwo.class);
i.putExtra("Value1", "This value one for ActivityTwo ");
i.putExtra("Value2", "This value two ActivityTwo");
接收:
Bundle extras = getIntent().getExtras();
if (extras != null)
// get data via the key
String value1 = extras.getString("Value1");
if (value1 != null)
// do something with the data
【讨论】:
【参考方案5】:startActivity 调用不会启动您创建的 Choice 实例,您可以将其视为向应用程序发送消息以创建新的 Choice 类型的 Activity。
如果你想向Activity传递信息,它在intent中的“额外”信息。然后,您可以从 Choice 活动的 onCreate 中的 extras 中检索信息。
见documentation。
【讨论】:
【参考方案6】:Intent ix=new Intent(this ,Choice.class);
这可能有效。 要传递值,您需要添加以下代码
ix.putExtra("key_name",value);
比写ix.startActivity();
检索您可以使用getIntent().getStringExtra("key_name");
【讨论】:
【参考方案7】:您没有将任何内容传递给您正在打开的新活动。您需要在 startActivity 之前使用 putExtra ,然后在其他活动中的 OnCreate 中使用 getExtra 。
使用不扩展活动并带有构造函数和成员的类 Choice。
public class Choice()
//members
//constructor
Choice myChoice = new Choice(songf,sizef,linkf,indexf,count);
然后像传递额外的一样调用第二个活动。
Intent ix=new Intent("com.example.harmony.mysecondactivity");
ix.putExtra(myChoice, strName);
startActivity(ix);
在其他活动中获得额外的回报
private Choice myChoiceFromTheOtherActivity;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.intent);
Intent i= getIntent();
Bundle b = i.getExtras();
myChoiceFromTheOtherActivity = new Choice();
//you may need to parse this i don't remember
myChoiceFromTheOtherActivity = extras.getString("myChoice");
http://developer.android.com/reference/android/content/Intent.html
【讨论】:
【参考方案8】:您正在尝试将数据从主要活动传递到选择活动?做过 我明白你的意思吗?如果是这样,我建议使用 Intent 类的 putExtra/s 方法。然后,在 Choice 活动中,通过调用 Activity 类的 getIntent() 方法检索额外内容,该方法返回启动该活动的意图。然后使用 Intent 类的 getExtra/s 方法。 请注意,您主要可以放置原始数据类型、原始数据类型数组以及我建议您探索的其他一些类。 所以,在 MainActivity 中:
Intent intent = new Intent(this, SomeOtherActivity.class);
intent.putExtra(KEY, new String("some data")); //Remember to check out
// which values you can pass in the Intent documentation
startActivity(intent);
并在 SomeOtherActivity 中检索数据
Intent intent = getIntent();
String data = intent.getStringExtra(KEY);
// Notice that because i passed am String value, I'm using the
// corresponding method to retrieve the data. Also in the Intent documentation
还有一种方法可以传递服装对象,让它们实现 Serializable 类,并使用 putExtra(String key, Serializable value) 方法,通过调用 Intent.getSerializableExtra(String key) 方法获取数据。
我建议您阅读有关该主题的一些教程。 这是我的最爱之一,Vogella 教程。 Intent tutorial. 祝你好运!
【讨论】:
以上是关于无法将值从一个意图传递到另一个意图的主要内容,如果未能解决你的问题,请参考以下文章