2016-08-10 5 views
-2

이 코드는이 코드 인상 런타임 예외

package com.example.lenovo.email; 

import android.accounts.Account; 
import android.accounts.AccountManager; 
import android.content.Context; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.util.Patterns; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.Spinner; 

import java.util.regex.Pattern; 

public class MainActivity extends AppCompatActivity { 
    private static String[] userEmailId = null; 
    private static String mDeviceId = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Spinner dropdown = (Spinner)findViewById(R.id.spinner); 

     String[] email_a=null; 
     email_a=setUserEmailId(this); 
     if(email_a == null) 
     { 
      throw new RuntimeException("null"); 
     } 
     else { 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, email_a); 
      dropdown.setAdapter(adapter); 
      EditText edit = (EditText) findViewById(R.id.editText2); 
      // edit.setText(setUserEmailId(this)); 
     } 

    } 
    //used to get accounts in dropdown list 
    private static String[] setUserEmailId(Context mContext) { 
     Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+ 
     Account[] accounts = AccountManager.get(mContext).getAccounts(); 
int i=0; 
     for (Account account : accounts) { 
      if (emailPattern.matcher(account.name).matches()) { 
       userEmailId[i] = account.name; 
       Log.d("Email",userEmailId[i]); 
       i++; 
      } 
     } 

     return userEmailId; 
    } 

} 

코드는 시간 예외를 실행 부여합니다 응용 프로그램에서 모바일에서 계정을 얻는 것입니다.
이 코드를 실행하면 응용 프로그램이 중지되었습니다.
나는이 예외를 해결할 수 .....

+0

에 오신 것을 환영합니다 SO로를 응용 프로그램 정지를 강제하는 주된 이유입니다! 다음과 같이 질문을 수정해야합니다. http://stackoverflow.com/help/how-to-ask – Shaishav

+0

충돌에 대한 질문을 할 때 logcat 세부 정보도 포함해야합니다. –

+0

logcat – SaravInfern

답변

1

문제는 당신이 그것에 요소를 추가하려고 할 때 여전히 null, 당신은 제대로 userEmailId를 초기화하지 않은 것입니다.

난 당신이 대신 String 배열의 ArrayList를 사용하는 것이 좋을 것 :

private List<String> getUserEmailId(Context context) { 
    List<String> list = new ArrayList<>(); 

    Pattern emailPattern = Patterns.EMAIL_ADDRESS; 
    Account[] accounts = AccountManager.get(context).getAccounts(); 

    for (Account account : accounts) { 
     if (emailPattern.matcher(account.name).matches()) { 
      list.add(account.name); 
     } 
    } 

    return list; 
} 
0

을 당신이 그것을 해결하지 않고 RuntimeException를 사용하는 이유는 무엇입니까? 나는 당신이 예외를 잡을 필요가 있다는 것을 의미한다.

나는 생각한다. setUserEmailId 메서드는 null을 리턴한다. 전자 메일을 찾으려는 코드의 논리를 확인하십시오. 당신은 이메일을 찾지 못한 경우 에게 로그 캣를 사용해야 RuntimeException는 :)

if(email_a == null){ 
    throw new RuntimeException("null"); 
}