无法将值从一个意图传递到另一个意图

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.htmlBundle的例子***.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. 祝你好运!

【讨论】:

以上是关于无法将值从一个意图传递到另一个意图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用会话将值从一个php页面传递到另一个页面

在 Unity 中,如何将值从一个脚本传递到另一个脚本?

将值从一个 Python 程序传递到另一个程序

将值从一个组件传递到另一个组件

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图

如何将值从一个片段的回收器视图项传递到另一个片段