使用EditText时出现NullPointerException

时间:2014-01-07 09:57:15

标签: java android

我有以下功能,我从2个不同的功能调用。我调用all的第一种方式是正确的,第二种方式我得到以下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;      
    }
}

Logcat:

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)

感谢任何帮助!!

3 个答案:

答案 0 :(得分:2)

在这里,您传递TextView作为doSearch方法的争论。并且您使用EditText获得了TextView,所以显然editTextnull

我猜这一行导致了NPE

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

尝试此操作..以获取EditText

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

答案 1 :(得分:0)

您正在将函数中的视图转换为EditText,并且您在OnClick中传递TextView尝试此doSearch((EditText)v);

答案 2 :(得分:0)

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

在上面的代码中,您将视图作为 Textview doSearch((TextView)v)传递,并且在您的doSearch方法实现内部,您将TextView转换为EditText,这是因为NullpointerException( EditText editSearch =(EditText)v.findViewById(R.id.editSearch);

改变
     doSearch((TextView)v);

    doSearch((EditText)v);