Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AndroidSDK如何创建侦听器_Java_Android_Sdk - Fatal编程技术网

Java AndroidSDK如何创建侦听器

Java AndroidSDK如何创建侦听器,java,android,sdk,Java,Android,Sdk,伙计们,我需要这些代码的帮助: public View.OnClickListener btnGetLastLocationOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (mGoogleApiClient != null) { if (mGoogleApiClient.isConnected()

伙计们,我需要这些代码的帮助:

    public  View.OnClickListener btnGetLastLocationOnClickListener = new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        if (mGoogleApiClient != null) {
            if (mGoogleApiClient.isConnected()) {
                getMyLocation();
            } else {
                Toast.makeText(AddEditActivity.this,
                        "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show();
            }
        } else {
            Toast.makeText(AddEditActivity.this,
                    "mGoogleApiClient == null", Toast.LENGTH_LONG).show();
        }
    }
};
所以我想做的是,当我点击btnGetLocation时,这段代码应该可以工作,但是当我开始活动时,代码会自动工作,所以我如何才能使其仅在我点击按钮时工作

我希望你们理解这个问题,我是新的Android开发者,所以我还在学习原谅我的愚蠢问题

多谢各位

***更新:

以下是全部代码:

 TextView txtmylink;
GoogleApiClient mGoogleApiClient;
Location mLastLocation;
Button getlastlocation;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    txtmylink = (TextView) findViewById(R.id.mylink);
    getlastlocation = (Button) findViewById(R.id.getlastlocation);
    getlastlocation.setOnClickListener(getlastlocationOnClickListener);

    // Create an instance of GoogleAPIClient.
    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }
}

View.OnClickListener getlastlocationOnClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        if (mGoogleApiClient != null) {
            if (mGoogleApiClient.isConnected()) {
                getMyLocation();
            } else {
                Toast.makeText(MainActivity.this,
                        "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show();
            }
        } else {
            Toast.makeText(MainActivity.this,
                    "mGoogleApiClient == null", Toast.LENGTH_LONG).show();
        }
    }
};

private void getMyLocation() {
    try {
        /* code should explicitly check to see if permission is available
        (with 'checkPermission') or explicitly handle a potential 'SecurityException'
         */
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        if (mLastLocation != null) {
            txtmylink.setText(String.valueOf("http://maps.google.com/maps?q=") +
                    String.valueOf(mLastLocation.getLatitude()) +
                    String.valueOf(",")+ String.valueOf(mLastLocation.getLongitude()));

        } else {
            Toast.makeText(MainActivity.this,
                    "mLastLocation == null",
                    Toast.LENGTH_LONG).show();
        }
    } catch (SecurityException e) {
        Toast.makeText(MainActivity.this,
                "SecurityException:\n" + e.toString(),
                Toast.LENGTH_LONG).show();
    }
}

@Override
protected void onStart() {
    mGoogleApiClient.connect();
    super.onStart();
}

@Override
protected void onStop() {
    mGoogleApiClient.disconnect();
    super.onStop();
}

@Override
public void onConnected(@Nullable Bundle bundle) {
    getMyLocation();
}

@Override
public void onConnectionSuspended(int i) {
    Toast.makeText(MainActivity.this,
            "onConnectionSuspended: " + String.valueOf(i),
            Toast.LENGTH_LONG).show();
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    Toast.makeText(MainActivity.this,
            "onConnectionFailed: \n" + connectionResult.toString(),
            Toast.LENGTH_LONG).show();
}

}

这是因为您尚未将已写入的
视图.onClickListener
对象关联到任何对象。因此,当活动启动时,监听器的代码将被执行。当您希望某个特定视图对单击做出响应时,可以将
视图.onClickListener
与之关联。因此,在您的情况下,添加以下内容

yourbutton.setOnClickListener(btnGetLastLocationOnClickListener)

确保已将
按钮
绑定到
按钮
视图。

您可以使用以下代码完成此操作

btnGetLocation = (Button) findViewById(R.id.btnGetLocation); // or whatever you called the button
btnGetLocation.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         if (mGoogleApiClient != null) {
             if (mGoogleApiClient.isConnected()) {
                 getMyLocation();
             } else {
                 Toast.makeText(AddEditActivity.this,
                     "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show();
             }
          } else {
              Toast.makeText(AddEditActivity.this,
                  "mGoogleApiClient == null", Toast.LENGTH_LONG).show();
          }
     }
}
请注意,您可以在
onCreate()
方法中添加此代码以使其正常工作

尝试以下操作:

public void onClick(View v) {
          if (view.getId() == R.id.btnGetLocation)
             if (mGoogleApiClient != null) {
                 if (mGoogleApiClient.isConnected()) {
                     getMyLocation();
                 } else {
                     Toast.makeText(AddEditActivity.this,
                         "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show();
                 }
              } else {
                  Toast.makeText(AddEditActivity.this,
                      "mGoogleApiClient == null", Toast.LENGTH_LONG).show();
              }
         }
如果仍然无法工作,请按以下方式编写代码:

您的活动必须实现OnClickListener和

btnGetLocation.setOnClickListener(this)
你会有这样的一个吻

public void onClick(View v) {
              if (view.getId() == R.id.btnGetLocation)
                 if (mGoogleApiClient != null) {
                     if (mGoogleApiClient.isConnected()) {
                         getMyLocation();
                     } else {
                         Toast.makeText(AddEditActivity.this,
                             "!mGoogleApiClient.isConnected()", Toast.LENGTH_LONG).show();
                     }
                  } else {
                      Toast.makeText(AddEditActivity.this,
                          "mGoogleApiClient == null", Toast.LENGTH_LONG).show();
                  }
             }

请发布您的完整课程代码。100%有效谢谢,现在按钮有效,但当我开始活动时,仍然会自动获取值并将其放入文本框,而且当我单击按钮时,它也会执行相同的操作,因此我只希望按钮获得值,如果你能帮忙,我会非常高兴的。@not_reach_stackoverflow的答案对我来说很有用,但当我开始活动时,它会自动获取值并将其放入文本框,当我单击按钮时,它也会执行相同的操作,所以我只希望按钮获取值,如果你能帮忙,我会非常高兴的。请我已经更新了主要问题,请检查一下好吗?谢谢,伙计,但我仍然有同样的问题,那就是一旦我开始活动就加载值,如果你能帮忙,我会非常感谢。你有没有使用这个提示:btnGetLocation.setOnClickListener(这个)?是的,但我在(此)下面画了红线,只是为了清除此代码btnGetLocation。setOnClickListener(此)应位于此void protected void onCreate(Bundle savedinstancestate)中,因为您没有在活动中的
OnClickListener
接口上实现,所以您将转到红线。