博观而约取,厚积而薄发。这篇文章主要讲述java.lang.IllegalStateException:无法执行android的方法:onClick访问变量Android [重复]相关的知识,希望能为你提供帮助。
这个问题在这里已有答案:
- What is a NullPointerException, and how do I fix it? 12个答案
CustomInfoWindowAdapter.java
我已经为(纬度和经度)创建了GET
方法,并且在MainActivityMaps.java
我创建了按钮的方法,在我创建的这个方法中(显示当前和标记选择的两种方法)当前工作正常,但我有问题(错误)在(选择标记)应用程序崩溃main activity.Java
// button onclick callto show latitude andlongitude as a toast for test
publicvoid showcurrentlocationattost(View view){
displaytestcurrent(mLastLocation);
displayplace(mCurrLocationMarker);
// mCurrLocationMarker ->
just name
}public void displaytestcurrent(Location location){
LatLng latLngcurrent = new LatLng(location.getLatitude(), location.getLongitude());
String text = (String.valueOf("latitude = "+latLngcurrent.latitude+" , "+"longitude = "+ latLngcurrent.longitude));
Toast.makeText(getApplicationContext(), text,
Toast.LENGTH_SHORT).show();
}public void displayplace(Marker marker){
Context context = getApplicationContext();
CustomInfoWindowAdapter op = new CustomInfoWindowAdapter(context);
// access getlati for latitude and getlongi //for longitudeFrom this class//CutomInfoWindowAdapter.java
String text = (String.valueOf("latitude = "+op.getlati()+" , "+"longitude = "+ op.getlongi()));
Toast.makeText(getApplicationContext(), text,Toast.LENGTH_SHORT).show();
// for test
Log.d("testL", String.valueOf(op.getlati()));
}
Cu Tom info window adapter.Java
package com.example.mostafa.parking;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
public class CustomInfoWindowAdapter implements GoogleMap.InfoWindowAdapter{private Marker marker;
private final View mWindow;
private Context mContext;
double lati=0.0;
double longi=0.0 ;
String locat;
public CustomInfoWindowAdapter(Context context){
mContext = context;
mWindow = LayoutInflater.from(context).inflate(R.layout.custom_info_window,null);
}private double rendomWindowtext(Marker marker, View view){
LatLng location = marker.getPosition();
String title = marker.getTitle();
TextView tvTitle = (TextView) view.findViewById(R.id.title);
TextView tvLocat = (TextView) view.findViewById(R.id.locat);
lati = location.latitude;
longi = location.longitude;
if (!title.equals("")){
tvTitle.setText(title);
}
if (!location.equals("")){
tvLocat.setText(String.valueOf(lati));
}Log.d("lati", String.valueOf(lati));
Log.d("longi", String.valueOf(longi));
locat= String.valueOf(location);
Log.d("Location", String.valueOf(location.latitude));
String text = (String.valueOf("latitude = "+lati+" , "+"longitude = "+ longi));
Toast.makeText(mContext.getApplicationContext(), text,
Toast.LENGTH_SHORT).show();
return lati;
}publicdouble getlati(){
LatLng location = marker.getPosition();
return location.latitude;
}publicdouble getlongi(){
LatLng location = marker.getPosition();
return location.longitude;
}@Override
public View getInfoWindow(Marker marker) {
rendomWindowtext(marker,mWindow);
return mWindow;
}@Override
public View getInfoContents(Marker marker) {
rendomWindowtext(marker,mWindow);
return mWindow;
}
}
XML
<
?xml version="1.0" encoding="utf-8"?>
<
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<
fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivityMaps" />
<
--onClick="showcurrentlocationattost -->
<
Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Direction"
android:onClick="showcurrentlocationattost"/>
<
/RelativeLayout>
错误
Process: com.example.mostafa.parking, PID: 5750
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.View$DeclaredOnClickListener.onClick(View.java:4700)
at android.view.View.performClick(View.java:5612)
at android.view.View$PerformClick.run(View.java:22288)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4695)
at android.view.View.performClick(View.java:5612)
at android.view.View$PerformClick.run(View.java:22288)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.model.LatLng com.google.android.gms.maps.model.Marker.getPosition()' on a null object reference
at com.example.mostafa.parking.CustomInfoWindowAdapter.getlati(CustomInfoWindowAdapter.java:62)
at com.example.mostafa.parking.MainActivityMaps.displayplace(MainActivityMaps.java:334)
at com.example.mostafa.parking.MainActivityMaps.showcurrentlocationattost(MainActivityMaps.java:306)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4695)
at android.view.View.performClick(View.java:5612)
at android.view.View$PerformClick.run(View.java:22288)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
答案除非我遗漏了某些东西,否则标记始终为空。
publicdouble getlati(){
LatLng location = marker.getPosition();
return location.latitude;
}publicdouble getlongi(){
LatLng location = marker.getPosition();
return location.longitude;
}
也许我错过了一些东西,但我看不到在适配器中设置标记的位置。你将它声明在顶部,但它从未设置过。因此总是空的。
另一答案问题是CustomInfoWindowAdapter中的标记对象是NULL,这就是抛出NullPointerException的原因。
解决它的一种方法是在该类的构造函数中添加标记,我的意思是替换它:
public CustomInfoWindowAdapter(Context context){
mContext = context;
mWindow = LayoutInflater.from(context).inflate(R.layout.custom_info_window,null);
}
有了这个:
public CustomInfoWindowAdapter(Context context, Marker marker){
mContext = context;
mWindow = LayoutInflater.from(context).inflate(R.layout.custom_info_window,null);
this.marker = marker;
}
并在displayplace中创建实例时传递标记,如下所示:
CustomInfoWindowAdapter op = new CustomInfoWindowAdapter(context, marker);
推荐阅读
- android检查位置服务启用播放服务位置api
- 映射Android开发的跟踪要求
- 如何在Polymer中使用app-localstorage-document
- app-header内的聚合物app-drawer无法正常工作
- 如何在聚合物2中使用app-route来获得深层路径()
- 以编程方式调整Android视图大小
- 如何查看别人的网站使用了什么技术()
- 9种很棒的网站恶意软件扫描工具
- 为什么备份对WordPress安全如此重要()