2014-01-07 15 views
1

다음 두 가지 기능을 통해 다음과 같은 기능을 사용할 수 있습니다. 모두를 호출하는 첫 번째 방법은 올바른, 두 번째 방법은 다음 NullPointerException 얻을. 이유가 무엇입니까? EditText를 사용할 때 NullPointerException이 발생했습니다.

private void doSearch(View v) { 

    Activity activity = getActivity(); 
    //get the text: 
    EditText editSearch = (EditText) v.findViewById(R.id.editSearch); 
    String query = editSearch.getText().toString(); 
    //check if 2 letters were entered for search 
    if (query.length()>1){ 
     //call service with extra 
     Intent intent = new Intent(activity, SearchPlacesService.class); 
     intent.putExtra("query", query);    
     activity.startService(intent); 
    }else{ 
     Toast.makeText(getActivity(), "Please enter 2 letters for search", Toast.LENGTH_SHORT).show(); 
    } 
} 



    //good call 
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
    switch (v.getId()) { 
    case R.id.editSearch: 
     doSearch(v); 
     return true; 
    } 
    return false; 
} 


//unsuccessful call 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.btnSearch: 
     doSearch((TextView) v); 
     break;  
    } 
} 

로그 캣

:

01-07 09:29:08.843: E/AndroidRuntime(1078): FATAL EXCEPTION: main 
01-07 09:29:08.843: E/AndroidRuntime(1078): java.lang.NullPointerException 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at com.lora_solomon.myfavoriteplaces.view.FragmentList.doSearch(FragmentList.java:137) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at com.lora_solomon.myfavoriteplaces.view.FragmentList.onClick(FragmentList.java:100) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at android.view.View.performClick(View.java:4084) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at android.view.View$PerformClick.run(View.java:16966) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at android.os.Handler.handleCallback(Handler.java:615) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at android.os.Looper.loop(Looper.java:137) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
01-07 09:29:08.843: E/AndroidRuntime(1078):  at dalvik.system.NativeStart.main(Native Method) 

어떤 도움을 주셔서 감사합니다!

+2

StackTrace를 알려주시겠습니까? –

+0

로그에 v, v.getId(), R.id.btnSearch? – rajesh

+2

'View view = (View) v.getParent();'그렇다면'view.findVIewById' – Raghunandan

답변

2

을 시도 통과된다. 그리고 당신이 그렇게 분명 editTextTextView를 사용하여 EditText을 받고하는 것은 null

내가이 줄 this..for가 글고

View parent =(View) v.getParent(); 
EditText editSearch = (EditText) parent.findViewById(R.id.editSearch); 
+0

tx!) : – Lora

+0

왜 onEditorAction은 좋은 호출입니까? – smileVann

+0

나는 당신의 질문을 이해하지 못합니다. ... 사용자가 버튼없이 검색을 활성화 할 수있게되면 그걸 원합니다. – Lora

0

당신은 글고 치기에 함수에서보기를 캐스팅하고 당신의 OnClick에서 텍스트 뷰 당신이 doSearch 방법에 대한 아규먼트로 TextView을 전달하는 다음이 doSearch((EditText)v);

+0

나는 이것을 시도하고 작동하지 않지만 tx forthe 노력 (: – Lora

0
//unsuccessful call 
public void onClick(View v)  
{  
switch (v.getId()) {  
    case R.id.btnSearch:  
     doSearch((TextView) v);//changes  
     break;  
    }  
} 
가져 오는 시도 NPE에게

String query = editSearch.getText().toString(); 

의 원인이되는 생각입니다

위 코드에서보기를 으로 전달하고 있습니다. Textview doSearch ((Tex tView) v) 및 귀하의 doSearch 메서드 구현에서 내부 TextView를 EditText로 캐스팅하는 이유는 NullpointerException (EditText editSearch = (EditText) v.findViewById (R.id.editSearch);)

변경 사항
doSearch ((TextView) v);
to
doSearch ((EditText) v);

관련 문제