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

时间:2015-05-01 17:34:33

标签: java android eclipse android-activity adt

这是我将值传递给名为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();

    }

}


}

初始化初始化的字符串值未初始化并为我提供空值。我无法理解这个问题。请帮帮我。

7 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用 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);

答案 2 :(得分:0)

如果要将某些数据从一个活动传输到另一个活动,则必须使用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

答案 3 :(得分:0)

共享元素必须由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
    } 
}

答案 4 :(得分:0)

startActivity调用不会启动您创建的Choice实例,您可以将其视为向应用程序发送消息以创建类型为Choice的新活动。

如果您想将信息传递给活动,请在&#34; extra&#34;意图中的信息。然后,您可以在选择活动的onCreate中从附加内容中检索信息。

documentation

答案 5 :(得分:0)

Intent ix=new Intent(this ,Choice.class);
这可能有用。 要传递值,您需要添加以下代码

ix.putExtra("key_name",value);

而不是写ix.startActivity(); 要检索您可以使用getIntent().getStringExtra("key_name");

答案 6 :(得分:0)

您是否尝试将数据从主要活动传递到Choice活动?难道 我告诉你了吗?如果是这样,我建议使用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. 祝你好运!