2015-04-26 3 views
1

Я только начал изучать программирование на Android, но у меня возникла проблема с запуском Activity for Result (используя onActivityResult(), setResult()).Android startActivityForResult()

Во-первых, существует три вида деятельности - Главная, Регистрация, СубАктивность (Но мой вопрос касается двух видов деятельности - Главная, Регистрация). Я зарегистрировал их все «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> 

Как вы видите, три мероприятия успешно зарегистрирован.

Это основная деятельность.

Main Activity

и если я касаюсь кнопки 'REG', мы переходим в операцию 'Регистрация'.

Register Activity

Если REG касания Регистрация активность возвращает информацию Основной деятельности и Основная деятельность сохраняет его в ArrayList.

Код внизу является основной деятельностью (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; 
     } 
    } 
} 

И код ниже Регистрация активности (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 класс, который есть член Ид "и«PW». Кажется, что нет никаких проблем в классе Person)

Кажется, что сама деятельность регистрации работает хорошо - она ​​показывает ошибку тоста, когда каждый пароль отличается, но когда оба они одинаковы (при переходе к основной активности), возникает ошибка: «Myapp остановлен», я действительно могу », Знаю, что проблема! Пожалуйста, дайте мне знать, что это неправильно :(

ответ

1

, когда оба из них одинаковы (при переходе к Основной вид деятельности), Error происходит: «Myapp остановлен»

Возможно получение NPE исключение users ArrayList является null при вызове метода add в onActivityResult добавить следующую строку в onCreate метода:.

users=new ArrayList<Person>(); 
0

Является ли человек классным? Как вы не можете передать нецелесообразный объект пользовательского класса к намерению?

Пожалуйста, проверьте logcat для получения ошибок .. Чтобы мы могли помочь лучше.

Смежные вопросы