2013-05-12 2 views
0

저는 새로운 Android 코더이며 startActivityForResult 함수를 사용하여 싸우고 있습니다. 이 메서드를 시작하는 Button을 클릭하면 충돌로 인해 다른 작업을 수행 할 수 없습니다.Android : startActivityForResult가 새로운 활동을 시작하는 동안 충돌합니다.

MainActivity.java 클래스가 있습니다. 여기에 공공 무효 setRegisterOnClick (보기 v를) 나는 두 번 startActivityForResult를 사용하여 동일한 활동에 다른 의도를 보내고 싶습니다. 인 텐트에는 int.Number가 포함되며이 번호는 Users.class로 전달되고 giveResponse를 선언하는 데 사용됩니다. 하지만 startActivityForResult 버튼을 클릭 할 때마다 앱이 다운됩니다. 매니페스트의

package com.example.login; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    private static final int USERS_REQUEST_CODE=1; 
    private static String sActualLogin = "admin"; 
    private static String sActualPassword = "qwerty"; 
    private static String sContainer = ""; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

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

    public void setLoginOnClick(View v) 
    { 
     EditText etLogin = (EditText) findViewById(R.id.tfLogin); 
     EditText etPassword = (EditText) findViewById(R.id.tfPassword); 

     String sLogin = etLogin.getText().toString(); 
     String sPassword = etPassword.getText().toString(); 

     if (sLogin.equals(sActualLogin) && sPassword.equals(sActualPassword)) 
     { 
      Intent intent = new Intent (this, Inside.class); 
      startActivity(intent); 
     } 
     else 
     { 
      Toast.makeText(this, "Invalid username or password.", Toast.LENGTH_LONG).show(); 
     } 

    } 

    public void setRegisterOnClick(View v) 
    { 
     Intent intentLOGIN = new Intent(this, Users.class); 
     intentLOGIN.putExtra("Type",1); 
     startActivityForResult(intentLOGIN, USERS_REQUEST_CODE); 
     sActualLogin=sContainer; 

     Intent intentPASSWORD= new Intent(this, Users.class); 
     intentPASSWORD.putExtra("Type",2); 
     startActivityForResult(intentPASSWORD, USERS_REQUEST_CODE); 
     sActualPassword=sContainer; 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      sContainer = data.getStringExtra(Users.RESPONSE); 
     }  
} 

Users.class

package com.example.login; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 

public class Users extends Activity { 

    public static final String RESPONSE = "Response"; 

    EditText etNewLogin = (EditText) findViewById(R.id.etChangeLogin); 
    EditText etNewPassword = (EditText) findViewById(R.id.etChangePassword); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.users); 
    } 

    public void giveResponse(View v) 
    { 
     Intent intent = getIntent(); 
     int iOperation = intent.getIntExtra("Type", 0); 


     if (iOperation == 1){ 
      String sNewLogin = etNewLogin.getText().toString();  
      Intent resultIntent1 = new Intent(); 
      resultIntent1.putExtra(RESPONSE, sNewLogin); 
      setResult(RESULT_OK, resultIntent1); 
      finish(); 
     } 

     if (iOperation == 2){ 
      String sNewPassword = etNewPassword.getText().toString(); 
      Intent resultIntent2 = new Intent(); 
      resultIntent2.putExtra(RESPONSE, sNewPassword);  
      setResult(RESULT_OK, resultIntent2); 
      finish(); 
    } 


    } 
} 

조각 :

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <activity 
      android:name="com.example.login.MainActivity" 
      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="com.example.login.Users"></activity> 
     <activity android:name="com.example.login.Inside"></activity> 

    </application> 

오류 : 글쎄, 그런 사소한 문제에 대한 많은 썼다

05-12 20:22:10.350: W/dalvikvm(6349): threadid=1: thread exiting with uncaught exception (group=0x40a191f8) 
05-12 20:22:10.360: E/AndroidRuntime(6349): FATAL EXCEPTION: main 
05-12 20:22:10.360: E/AndroidRuntime(6349): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.login/com.example.login.Users}: java.lang.NullPointerException 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.os.Looper.loop(Looper.java:137) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.app.ActivityThread.main(ActivityThread.java:4429) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at dalvik.system.NativeStart.main(Native Method) 
05-12 20:22:10.360: E/AndroidRuntime(6349): Caused by: java.lang.NullPointerException 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.app.Activity.findViewById(Activity.java:1794) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at com.example.login.Users.<init>(Users.java:13) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at java.lang.Class.newInstanceImpl(Native Method) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at java.lang.Class.newInstance(Class.java:1319) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871) 
05-12 20:22:10.360: E/AndroidRuntime(6349):  ... 11 more 

은 (내 생각 : P) 그러나 나는 미경험이므로 hou 그것으로 싸울 rs 및 나는 그것을 얻지 않는다. 안내/도와주세요.

답변

2

당신이 사용하는 자식 위젯을 액세스하기 전에 layoutsetContentView를 사용하여 설정해야합니다 예를 들어 findViewByID

또한
private EditText etNewLogin; 
private EditText etNewPassword; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.users); 
    tNewLogin = (EditText) findViewById(R.id.etChangeLogin); 
    tNewPassword = (EditText) findViewById(R.id.etChangePassword); 
} 

당신이 올바른 ID를 사용하여보기를 accesing 있는지 확인

1
EditText etNewLogin; 
EditText etNewPassword;; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.users); 
    etNewLogin = (EditText) findViewById(R.id.etChangeLogin); 
    etNewPassword = (EditText) findViewById(R.id.etChangePassword);  
} 

활동에 컨텐츠를 설정 한 후에 ID를 찾아야합니다. 당신이 당신의 AndroidManifest를 파일에 제대로 활동을 선언하지 않은 경우

Toast.makeText(MainActivit.this, "Invalid username or password.", Toast.LENGTH_LONG).show(); 
    Intent intentLOGIN = new Intent(MainActivity.this, Users.class);// use activity context 
    intentLOGIN.putExtra("Type",1); 
    startActivityForResult(intentLOGIN, USERS_REQUEST_CODE); 
    sActualLogin=sContainer; 

    Intent intentPASSWORD= new Intent(MainActivity.this, Users.class);// use activity context 
    intentPASSWORD.putExtra("Type",2); 
    startActivityForResult(intentPASSWORD, USERS_REQUEST_CODE); 
    sActualPassword=sContainer; 
0

에 대한 MainActivity의 setLoginOnClick에서 또한

Intent intent = new Intent (MainActivity.this, Inside.class);// use activity context 
    startActivity(intent); 

같은 종종이 있는지 디렉토리 정보가 너무 올바른지 확인, 발생 앱은 귀하가 얻으려는 활동을 찾을 수 있습니다!

관련 문제