字符串未传递给第二个Android活动

时间:2012-02-17 01:06:35

标签: android string android-activity android-intent

我正在尝试在我的Android应用程序中启动一个新活动,我正在尝试将一个简单的字符串从第一个活动传递到第二个活动。我希望字符串在第二个活动中显示在textview中,但它不起作用。我做错了什么?

最初的活动:

package com.amritayalur.mypowerschool;



import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;



public class MyPowerSchoolActivity extends Activity {
Button buttonSubmit;
TextView TextViewTitle;
TextView TextViewDesc;
EditText EditTextURL;
String url = "";
 String str;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    buttonSubmit = (Button) findViewById(R.id.buttonSubmit);
    TextViewTitle = (TextView) findViewById(R.id.TextViewTitle);
    TextViewDesc = (TextView) findViewById(R.id.TextViewDesc);

    EditTextURL = (EditText) findViewById(R.id.EditTextURL);


    //Start TextView
    TextViewTitle.setText("MyPowerSchool");


    //button listener
    buttonSubmit.setOnClickListener(new View.OnClickListener() {


        String url = EditTextURL.getText().toString();


        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent i = new Intent( MyPowerSchoolActivity.this,
creds.class);    


            i.putExtra("pschoolurl", url);
            final int result = 1;
            startActivityForResult(i, result); 

        }

    });



}       
}

第二项活动:

package com.amritayalur.mypowerschool;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.webkit.WebView;
import android.widget.Toast;
import android.widget.TextView;



public class creds extends Activity {

String test;
TextView TextViewTest;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);




    Intent intent = getIntent();
    String test = intent.getExtras().getString("pschoolurl");

    TextViewTest = (TextView) findViewById(R.id.TextViewTest);
    TextViewTest.setText(test);

}
}

我知道textview在第二个活动中正确显示;它适用于任何虚拟文本,而不是变量。

4 个答案:

答案 0 :(得分:3)

你过早地实例化字符串,在创建监听器时,你应该在监听器被调用时得到它:

    @Override
    public void onClick(View v) {
        Intent i = new Intent( MyPowerSchoolActivity.this, creds.class);    
        i.putExtra("pschoolurl", EditTextURL.getText().toString());
        // get the text here     ^^^
        final int result = 1;
        startActivityForResult(i, result); 
    }
顺便说一句,请遵循命名约定并使用小写字母(editTextURL)启动变量,这会使代码更容易让其他人感到困惑(比如我:))

答案 1 :(得分:0)

在将任何值添加到OnClickListener之前,url的值将在实例化时设置。尝试在onClick方法的主体中读取TextView中的值。

答案 2 :(得分:0)

在代码中输入错误只是在buttonsubmit.onclicklistener方法中删除了url旁边的String。如果你想要从一个活动发送一个字符串到另一个活动,你不必为结果开始活动。 你的第二个活动就是这个。

Bundle b=getIntent().getExtras();
String url = b.getInt("pschoolurl");

答案 3 :(得分:0)

检查一下,只需将此代码放入第一个活动的onclick注意: - >直接捕获edittext donot将编辑文本保存在字符串中然后传递它,如果你要显示那么字符串将不会通过。见下面的例子

public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent i = new Intent(this,Web.class);
    i.putExtra("epuzzle",urlenter.getText().toString());
    final int result = 1;
        startActivityForResult(i, result);
    }

现在在第二个活动中放了这个,注意: - >你会尝试将传递的活动字符串首先保存到活动中的另一个字符串,然后它将无法工作,你应该直接将字符串传递给loadurl而不是保存并传递给loadurl。

  Intent intent = getIntent();
   w.loadUrl(intent.getExtras().getString("epuzzle"));
   w.getSettings().setJavaScriptEnabled(true);

请告诉我它是否适合您。