Android startActivityForResult()
Android startActivityForResult()
我刚开始学习 android 编程,但我在开始 Activity 时遇到问题(使用 onActivityResult()、setResult())。
首先,有三个activity - Main,Register,SubActivity(但我的问题是关于两个activity - Main,Register)。我像这样将它们全部注册到 'AndroidManifest.xml':
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wakwakwak.iwak.myapp" >
<uses-permission android:name="android.permission.VIBRATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SubActivity"
android:label="Here is SubWorld!">
</activity>
<activity android:name=".Register"
android:label="Register">
</activity>
</application>
</manifest>
如您所见,三个活动注册成功。
这是主要的 Activity。
如果我触摸 'REG' 按钮,我们将移动到 'Register' Activity。
如果REG被触摸,Register Activity returns 信息到Main Activity 并且Main Activity 将它保存到ArrayList.
下面的代码是主要的 Activity(Main.java).
package com.wakwakwak.iwak.myapp;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.util.ArrayList;
public class Main extends Activity {
private static ArrayList<Person> users;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(300);
}
public void onClick(View v){
EditText edId = (EditText)findViewById(R.id.edit_id);
EditText edPw = (EditText)findViewById(R.id.edit_pw);
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
switch(v.getId()){
case R.id.btn_login:
vibrator.vibrate(300);
Person person = new Person(edId.getText().toString(),edPw.getText().toString());
Intent intent1 = new Intent(this, SubActivity.class);
intent1.putExtra("person",person);
startActivity(intent1);
break;
case R.id.btn_register:
vibrator.vibrate(300);
Intent intent2 = new Intent(this,Register.class);
startActivityForResult(intent2, 0);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode)
{
case 0:
Person person = (Person)data.getSerializableExtra("person");
users.add(person);
Toast.makeText(this,person.toString(),Toast.LENGTH_SHORT).show();
break;
}
}
}
下面的代码是寄存器Activity(Register.java)
package com.wakwakwak.iwak.myapp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class Register extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
}
public void onClick(View view) {
EditText editId = (EditText)findViewById(R.id.edit_id);
EditText editPw = (EditText)findViewById(R.id.edit_pw);
EditText editPwAgain = (EditText)findViewById(R.id.edit_pwagain);
switch(view.getId()){
case R.id.btn_register:
if(!editPw.getText().toString().equals(editPwAgain.getText().toString())){
editPw.setText("");
editPwAgain.setText("");
Toast.makeText(this,"Passwords are not equal each other",Toast.LENGTH_SHORT).show();
}
else{
Person person = new Person(editId.getText().toString(),editPw.getText().toString());
Intent intent2 = new Intent();
intent2.putExtra("person",person);
setResult(0,intent2);
finish();
}
break;
}
}
}
(Person是一个class,有一个成员'id'和'pw'。看来Person class没有问题)
似乎 Register activity 本身运行良好 - 当每个密码不同时它显示错误 toast,但当它们相同时(当传递给 Main activity 时),发生错误:'Myapp is stopped' 我真的不知道是什么问题!!请让我知道哪里出了问题:(
when both of them are same(when passing to Main activity), Error
occurs: 'Myapp is stopped'
在 onActivityResult
中调用 add
方法时,可能会出现 NPE
异常 users
ArrayList 是 null
。在 onCreate
方法中添加以下行:
users=new ArrayList<Person>();
class 人可以打包吗?由于您无法将不可打包的自定义 class 对象传递给 intent ?
请检查logcat是否有错误..以便我们更好地提供帮助。
我刚开始学习 android 编程,但我在开始 Activity 时遇到问题(使用 onActivityResult()、setResult())。
首先,有三个activity - Main,Register,SubActivity(但我的问题是关于两个activity - Main,Register)。我像这样将它们全部注册到 'AndroidManifest.xml':
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wakwakwak.iwak.myapp" >
<uses-permission android:name="android.permission.VIBRATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SubActivity"
android:label="Here is SubWorld!">
</activity>
<activity android:name=".Register"
android:label="Register">
</activity>
</application>
</manifest>
如您所见,三个活动注册成功。
这是主要的 Activity。
如果我触摸 'REG' 按钮,我们将移动到 'Register' Activity。
如果REG被触摸,Register Activity returns 信息到Main Activity 并且Main Activity 将它保存到ArrayList.
下面的代码是主要的 Activity(Main.java).
package com.wakwakwak.iwak.myapp;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.util.ArrayList;
public class Main extends Activity {
private static ArrayList<Person> users;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(300);
}
public void onClick(View v){
EditText edId = (EditText)findViewById(R.id.edit_id);
EditText edPw = (EditText)findViewById(R.id.edit_pw);
Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
switch(v.getId()){
case R.id.btn_login:
vibrator.vibrate(300);
Person person = new Person(edId.getText().toString(),edPw.getText().toString());
Intent intent1 = new Intent(this, SubActivity.class);
intent1.putExtra("person",person);
startActivity(intent1);
break;
case R.id.btn_register:
vibrator.vibrate(300);
Intent intent2 = new Intent(this,Register.class);
startActivityForResult(intent2, 0);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode)
{
case 0:
Person person = (Person)data.getSerializableExtra("person");
users.add(person);
Toast.makeText(this,person.toString(),Toast.LENGTH_SHORT).show();
break;
}
}
}
下面的代码是寄存器Activity(Register.java)
package com.wakwakwak.iwak.myapp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class Register extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
}
public void onClick(View view) {
EditText editId = (EditText)findViewById(R.id.edit_id);
EditText editPw = (EditText)findViewById(R.id.edit_pw);
EditText editPwAgain = (EditText)findViewById(R.id.edit_pwagain);
switch(view.getId()){
case R.id.btn_register:
if(!editPw.getText().toString().equals(editPwAgain.getText().toString())){
editPw.setText("");
editPwAgain.setText("");
Toast.makeText(this,"Passwords are not equal each other",Toast.LENGTH_SHORT).show();
}
else{
Person person = new Person(editId.getText().toString(),editPw.getText().toString());
Intent intent2 = new Intent();
intent2.putExtra("person",person);
setResult(0,intent2);
finish();
}
break;
}
}
}
(Person是一个class,有一个成员'id'和'pw'。看来Person class没有问题)
似乎 Register activity 本身运行良好 - 当每个密码不同时它显示错误 toast,但当它们相同时(当传递给 Main activity 时),发生错误:'Myapp is stopped' 我真的不知道是什么问题!!请让我知道哪里出了问题:(
when both of them are same(when passing to Main activity), Error occurs: 'Myapp is stopped'
在 onActivityResult
中调用 add
方法时,可能会出现 NPE
异常 users
ArrayList 是 null
。在 onCreate
方法中添加以下行:
users=new ArrayList<Person>();
class 人可以打包吗?由于您无法将不可打包的自定义 class 对象传递给 intent ?
请检查logcat是否有错误..以便我们更好地提供帮助。