0

私は最初の Android アプリに取り組んでおり、コーディング中に、インテントで別のアクティビティから送信されたバンドルから受け取っていない値があることに気付きました。コードを分離することができましたが、コードから値を受け取らない理由がわかりません。

public class Registration extends Activity {
    EditText edit1;
    EditText edit2;
    EditText edit3;
    EditText edit4;
    JSONParser jsonParser = new JSONParser();
    public static String url_data="";
    private static final String TAG_SUCCESS = "operation";
    public final static String user="com.example.try1.MESSAGE";
    public final static String pass="com.example.try1.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent=getIntent();
        setContentView(R.layout.activity_registration);
         edit1= (EditText) findViewById(R.id.nameuser);
         edit2= (EditText) findViewById(R.id.email);
         edit3= (EditText) findViewById(R.id.username);
         edit4= (EditText) findViewById(R.id.password);


        Button btnRegister= (Button) findViewById(R.id.new_user);

        btnRegister.setOnClickListener(new View.OnClickListener(){

            public void onClick(View view){
                //new CreateNewProduct().execute();
                String message1= edit1.getText().toString();
                String message2= edit2.getText().toString();
                String message3= edit3.getText().toString();
                String message4= edit4.getText().toString();
                Intent i = new Intent(Registration.this, Login.class);
                Bundle extras=new Bundle();
                Log.d("username", message3);
                extras.putString(user, message3);
                extras.putString(pass, message4);
                i.putExtras(extras);
                startActivity(i);
                finish();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.registration, menu);
        return true;
    }
}

それが登録用のコードです。これはLogin.classのコードです

public class Login extends Activity {
    JSONParser jsnParser = new JSONParser();
    public static String url_login="http://www.reflap.com/account/reflap_login";
    private static final String TAG_SUCCESS = "operation";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //setContentView(R.layout.activity_login);
          //Intent it =getIntent();
          Bundle extras=this.getIntent().getExtras();
            String message=extras.getString("user");
            String message2=extras.getString("pass");
            //Log.d("username", message);
            if(message==null){
                Log.d("username", "empty value");
            }
            //Create the text view
            TextView text = new TextView(this);
            text.setTextSize(40);
            text.setText(message);

            setContentView(text);
        //new Loggerin().execute();
    }

メッセージ1はメッセージ2と同じなlog.dので、空の値を書き込みます。nullまた、ビューには何もありません。これを交換したら

String message=extras.getString("user");
String message2=extras.getString("pass");

これとともに

String message=extras.getString(Registration.user);
String message2=extras.getString(Registration.pass);

最後の値セットのみを受け取ります。バンドルを使用して、ログイン クラスで使用したい 2 つの文字列を送信しようとしています。

4

3 に答える 3

1

同様のキーを使用して、2 つのオブジェクトを別のアクティビティに送信しています。これにより、送信された文字列が失われます。

文字列の送信に別のキーを使用してみてください。

public final static String user="user";
public final static String pass="pass";

また、受信アクティビティでは、別のアクティビティからデータを送信するために使用したのと同じキーを使用していません。別のアクティビティから送信するために使用したデータを受信するには、同じキーを使用する必要があります。

于 2013-07-14T18:03:24.980 に答える
1
public final static String user="user";
public final static String pass="pass"; 

それで

extras.putString(user, message3);
extras.putString(pass, message4);  

取得するため

Bundle extras=getIntent().getExtras();
String message=extras.getString("user");
String message2=extras.getString("pass");

静的な最終文字列をキーとして使用する代わりに、以下のようにすることもできます

 extras.putString("user", message3);
 extras.putString("pass", message4);  

キーは一致する必要があります。

public String getString (String key)

API レベル 1 で追加

指定されたキーに関連付けられた値を返します。指定されたキーに目的の型のマッピングが存在しない場合、または null 値がキーに明示的に関連付けられている場合は null を返します。

パラメーター

キー文字列、または null

戻り値

文字列値、または null

于 2013-07-14T18:08:27.280 に答える
0

以下に同じ文字列を割り当てる理由

   public final static String user="com.example.try1.MESSAGE";
    public final static String pass="com.example.try1.MESSAGE";

だからそれを 変更してください //文字列を関連性のあるものにし、文字列が同じであってはなりません;

public final static String user="user";
public final static String pass="pass";

を使用して両方のデータを取得できるよりも

String message=extras.getString(Registration.user);
String message2=extras.getString(Registration.pass);
于 2013-07-14T18:14:04.080 に答える