java - 无法在 android :onClick attribute defined on view class. 的父或祖先上下文中找到方法。 AppCompatTextView

标签 java android

我正在使用 android 项目代码,单击文本时会加载附近的医院和警察局。但是当我点击 Nearbyhospital 时,应用程序被强制关闭,在主页的 xml 文件中说我从未使用过 onclick 方法,我尝试在 .java 页面中添加 nearhs 的方法..仍然有很多错误.. 有没有人看到我遗漏了什么或犯了错误?

下面的 Logcat:

java.lang.IllegalStateException: Could not find method nearhs(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatTextView with id 'nearhospitals1'
                                                                                    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:307)
                                                                                    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:266)
                                                                                    at android.view.View.performClick(View.java:5637)
                                                                                    at android.view.View$PerformClick.run(View.java:22433)
                                                                                    at android.os.Handler.handleCallback(Handler.java:751)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                    at android.os.Looper.loop(Looper.java:153)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:6208)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)

首页.java :

public class home extends AppCompatActivity implements LocationListener{

    Button alert;
    RelativeLayout rl1;
    TextView nearhspt;
    TextView nearpolice;
    TextView allhspt;
    TextView allpoli;
    TextView Bld;

    LocationManager locationManager;
    String mprovider;
    // Button service;
    String longitude, latitude;

//    SharedPreferences shared;
//    SharedPreferences.Editor editor;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);
    alert=(Button)findViewById(R.id.button_alert);
//        shared = getSharedPreferences("get", Context.MODE_PRIVATE);
//        editor = shared.edit();
        nearhspt= (TextView) findViewById(R.id.nearhospitals1);
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();

        mprovider = locationManager.getBestProvider(criteria, false);

        if (mprovider != null && !mprovider.equals("")) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            Location location = locationManager.getLastKnownLocation(mprovider);
            locationManager.requestLocationUpdates(mprovider, 15000, 1, this);

            if (location != null)
                onLocationChanged(location);
            else
                Toast.makeText(getBaseContext(), "TURN ON GPS", Toast.LENGTH_SHORT).show();
        }

        alert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SharedPreferences pref = getApplicationContext().getSharedPreferences("pref", MODE_PRIVATE);
                String cal = pref.getString("call", "");
                String sms=pref.getString("msg","");
                Log.e(cal, "gbggfgffg");
                Intent inte = new Intent(Intent.ACTION_CALL);
                inte.setData(Uri.parse("tel:" + cal));
                if (ActivityCompat.checkSelfPermission(home.this,
                        Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    return;
                }
             //   Uri smsToUri = Uri.parse("smsto:" + sms);

                // message = message.replace("%s", StoresMessage.m_storeName);
               //intent.putExtra("sms_body", message);

                startActivity(inte);

            }
        });}

    public  void  alerthspitl(View view){

        Intent inten = new Intent(Intent.ACTION_VIEW);

        SharedPreferences pref = getApplicationContext().getSharedPreferences("pref", MODE_PRIVATE);

        String sms=pref.getString("msg","");

        Uri uri = Uri.parse("smsto:" + sms);
        Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
        intent.putExtra("sms_body", "Accident");
        startActivity(intent);
        Toast.makeText(getApplication(),"sent",Toast.LENGTH_LONG).show();
    }


        public void onBackPressed(){
            AlertDialog.Builder alert=new AlertDialog.Builder(home.this);
            alert.setMessage("Do you want to exit?").setCancelable(false).setPositiveButton("Yes",new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    finishAffinity();
                }
            }).setNegativeButton("No",new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
                    dialog.cancel();
                }
            });
            AlertDialog al=alert.create();
            al.setTitle("Exit");
            al.show();
            return;
        }

    @Override
    public void onLocationChanged(Location location) {

        Double longitudes = location.getLongitude();
        longitude =  Double.toString(longitudes);
        Log.e("longitude_value", longitude);

        Double latitudes = location.getLatitude();
        latitude = Double.toString(latitudes);
        Log.e("latiude_value", latitude);

        nearhspt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent= new Intent(home.this,near_hsptl.class);

                SharedPreferences pref=getApplicationContext().getSharedPreferences("pref",MODE_PRIVATE);
                SharedPreferences.Editor editor=pref.edit();

                editor.putString("current_longitude", longitude);
                editor.putString("current_latitude", latitude);
                editor.apply();

                startActivity(intent);


            }
        });


    }

public  void nearpol(View view){
    nearpolice=(TextView)findViewById(R.id.nearpolicestatn1);
    //Intent intent= new Intent(home.this,near_police.class);
    SharedPreferences pref=getApplicationContext().getSharedPreferences("pref",MODE_PRIVATE);
    SharedPreferences.Editor editor=pref.edit();
    editor.putString("current_longitude", longitude);
    editor.putString("current_latitude", latitude);
    editor.apply();
    Intent intent= new Intent(home.this,near_police.class);
    startActivity(intent);


}
    public  void allhsp(View view){
        allhspt=(TextView)findViewById(R.id.allhsptl1);
        Intent intent= new Intent(home.this,all_hsptl.class);
        startActivity(intent);

    }
    public  void allpoli(View view){
        allpoli=(TextView)findViewById(R.id.allpolice1);
        Intent intent= new Intent(home.this,all_police.class);
        startActivity(intent);

    }
    public  void Bld(View view){
        allpoli=(TextView)findViewById(R.id.allpolice1);
        Intent intent= new Intent(home.this,blood.class);

        startActivity(intent);

    }
    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        if (id == R.id.action_settings){
            Intent intent= new Intent(home.this,view_profile.class);

            startActivity(intent);
        }
        else if(id==R.id.up){
            Intent intent= new Intent(home.this,updt_profile.class);

            startActivity(intent);
        }
        else  if(id==R.id.pswd){
            Intent intent= new Intent(home.this,updt_pswd.class);

            startActivity(intent);
        }

        else  if(id==R.id.logout){
           finishAffinity();
        }
        return super.onOptionsItemSelected(item);
    }

}

首页.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
>         android:layout_width="match_parent"
>         android:layout_height="match_parent"
>         android:background="#9e9e9e"
>         android:id="@+id/rl"
>         >
>     
>     
>         <Button
>             android:text="Alert police"
>             android:textColor="#FFFFFF"
>             android:textStyle="bold"
>             android:textSize="20dp"
>             android:layout_width="182dp"
>             android:layout_height="70dp"
>             android:layout_marginTop="5dp"
>             android:background="#EF5350"
>     
>             android:layout_marginLeft="5dp"
>             android:id="@+id/button_alert"
>             style="@android:style/Widget.Button.Small"
>             android:layout_alignParentLeft="true"
>             android:layout_alignParentStart="true"
>             android:layout_alignParentTop="true" />
>     
>     
>         <LinearLayout
>             android:layout_width="wrap_content"
>             android:layout_height="190dp"
>             android:orientation="vertical"
>             android:layout_marginTop="5dp"
>             android:background="@mipmap/download"
>             android:layout_below="@+id/button_alert"
>             android:layout_marginRight="5dp"
>             android:layout_marginLeft="5dp"
>             android:layout_alignParentRight="true"
>             android:layout_alignParentEnd="true"
>             android:layout_alignParentLeft="true"
>             android:layout_alignParentStart="true">
>     
>     
>             <TextView
>                 android:layout_width="wrap_content"
>                 android:layout_height="wrap_content"
>                 android:text="All Hospitals"
>                 android:layout_marginLeft="65dp"
>                 android:id="@+id/allhsptl1"
>                 android:onClick="allhsp"
>                 android:layout_marginTop="20dp"
>                 android:textSize="25dp"
>                 android:textStyle="bold"
>                 android:textColor="#f44336"/>
>     
>     
>             <TextView
>                 android:id="@+id/nearhospitals1"
>                 android:layout_width="wrap_content"
>                 android:layout_height="wrap_content"
>                 android:layout_marginLeft="60dp"
>                 android:layout_marginTop="20dp"
>                 android:onClick="nearhs"
>                 android:text="Near Hospitals"
>                 android:textColor="#f44336"
>                 android:textSize="25dp"
>                 android:textStyle="bold" />
>     
>             <TextView
>                 android:layout_width="wrap_content"
>                 android:layout_height="wrap_content"
>                 android:text="Blood Doners"
>                 android:onClick="Bld"
>                 android:id="@+id/Blood_donors"
>                 android:layout_marginLeft="60dp"
>                 android:layout_marginTop="15dp"
>                 android:textSize="25dp"
>                 android:textStyle="bold"
>                 android:textColor="#f44336"/>
>         </LinearLayout>
>     
>         <LinearLayout
>             android:layout_width="wrap_content"
>             android:layout_height="210dp"
>             android:layout_marginRight="5dp"
>             android:layout_marginLeft="5dp"
>             android:orientation="vertical"
>             android:background="@mipmap/hospital"
>             android:weightSum="1"
>             android:layout_marginTop="5dp"
>             android:layout_alignParentBottom="true"
>             android:layout_alignParentLeft="true"
>             android:layout_alignParentStart="true"
>             android:layout_alignParentRight="true"
>             android:layout_alignParentEnd="true">
>     
>     
>     
>             <TextView
>                 android:layout_width="wrap_content"
>                 android:layout_height="wrap_content"
>                 android:text="All PoliceStation"
>                 android:layout_marginLeft="60dp"
>                 android:onClick="allpoli"
>                 android:layout_marginTop="20dp"
>                 android:id="@+id/allpolice1"
>                 android:textSize="25dp"
>                 android:textStyle="bold"
>                 android:textColor="#f44336"/>
>     
>     
>             <TextView
>                 android:layout_width="wrap_content"
>                 android:layout_height="wrap_content"
>                 android:text="Near PoliceStation"
>                 android:layout_marginLeft="40dp"
>                 android:onClick="nearpol"
>                 android:layout_marginTop="40dp"
>                 android:id="@+id/nearpolicestatn1"
>                 android:textSize="25dp"
>                 android:textStyle="bold"
>                 android:textColor="#f44336"
>                 android:layout_weight="5.46" />
>     
>     
>         </LinearLayout>
>     
>         <Button
>             android:text="Alert hospital"
>             android:textColor="#FFFFFF"
>             android:textStyle="bold"
>             android:textSize="20dp"
>             android:layout_width="180dp"
>             android:layout_height="70dp"
>             android:background="#EF5350"
>     android:layout_marginRight="5dp"
>             android:onClick="alerthspitl"
>             android:id="@+id/button_alert2"
>     
>             style="@android:style/Widget.Button.Small"
>             android:layout_marginTop="5dp"
>             android:layout_alignParentRight="true"
>             android:layout_alignParentEnd="true" />
>     </RelativeLayout>

最佳答案

您已经定义了 android:onClick="nearhs",但是在您的 Activity 中没有可用的方法。

将此添加到您的 Activity 中:

public void nearhs(View view) {

}

您还试图在 onLocationChanged() 中为 nearhspt 设置 onClickListener。将此监听器移至 onResume()onCreate()

关于java - 无法在 android :onClick attribute defined on view class. 的父或祖先上下文中找到方法。 AppCompatTextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49704217/

相关文章:

java - 在 Java 中为对象字段赋值?

java - 将表名作为准备语句的参数传递

java - 如何检查javafx应用程序是否已经以编程方式运行?

android - 如何在 Android NDK 中创建线程?

android - 下载安卓SDK

java - 如何在android中用不同的字节覆盖文件的前一些字节

java - 在 JFrame 中的特定位置设置自定义 JPanel

java - 将 apache netbeans gradle 项目导出到 jar 文件

Android Studio - 无法从相机捕捉视频

Android 设备未显示在 Android 设备选择器中,但在 adb 中列出