(setter를 통해) 객체를 다른 클래스에 전달하려고합니다. 나중에이 객체 메소드를 호출 할 때 null 포인터 예외가 발생합니다. .객체의 메소드가 호출 될 때 null 포인터 예외가 발생합니다.
물론 개체의 값 할당은 setFlexInfo 함수를 호출하는 것보다 빠릅니다.
Tab1Preview.java
DatabaseTierFlex dbFlex = new DatabaseTierFlex(getContext());
tier = dbFlex.getTier(summoner.getSummonerId());
jsInterface.setTierFlex(tier); // passing object
jsInterface.callJavaScript(webView, "setServer", summoner.getServer());
WebAppInterface.java
private Tier tierFlex; // declaration
private Context mContext;
private NestedWebView webView;
public WebAppInterface(NestedWebView webView, Context c) {
this.mContext = c;
this.webView = webView;
}
public void setTierFlex(Tier tierFlex) { // Setter
this.tierFlex = tierFlex;
}
@JavascriptInterface
public void setFlexInfo() { // method what I'm calling when I click a certain div
webView.post(new Runnable() {
@Override
public void run() {
// I'm getting NullPointerException here
callJavaScript(webView, "setWinsLosses", tierFlex.getWins(), tierFlex.getLosses());
if (tierFlex.getSeriesTarget() != -1) {
callJavaScript(webView, "setPromo", tierFlex.getSeriesTarget(), tierFlex.getSeriesProgress());
}
if (tierFlex.isFreshBlood()) {
callJavaScript(webView, "setEmblemFreshBlood");
}
if (tierFlex.isVeteran()) {
callJavaScript(webView, "setEmblemVeteran");
}
if (tierFlex.isHotStreak()) {
callJavaScript(webView, "setEmblemHotStreak");
}
}
});
}
public void callJavaScript(WebView view, String methodName, Object... params) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("javascript:try{");
stringBuilder.append(methodName);
stringBuilder.append("(");
String separator = "";
for (Object param : params) {
stringBuilder.append(separator);
separator = ",";
if (param instanceof String) {
stringBuilder.append("'");
}
stringBuilder.append(param);
if (param instanceof String) {
stringBuilder.append("'");
}
}
stringBuilder.append(")}catch(error){console.error(error.message);}");
final String call = stringBuilder.toString();
Log.i(TAG, "callJavaScript: call=" + call);
view.loadUrl(call);
}
편집 : 스택 추적
05-16 22 : 56 : 38.481 27438-27438/COM. example.krulkamyl.accountinfo E/AndroidRuntime : 치명적 예외 : 주 프로세스 : com.example.krulkamyl.accountinfo, PID : 27438 java.lang.NullPointerException : NULL 객체 참조에 가상 메소드 'int com.example.krulkamyl.accountinfo.model.Tier.getWins()'을 호출하려고 시도했습니다. at com.example.krulkamyl.accountinfo.interfaces.WebAppInterface $ 3.run (WebAppInterface.java:164) (android.os.Handler.handleCallback (Handler.java:739) android.os.Handler.dispatchMessage (Handler.java:164) : 95) android.os.Looper.loop (Looper.java:145) at android.app.ActivityThread.main (ActivityThread.java:6934) at java.lang.reflect.Method.invoke (네이티브 메소드) at java. com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1404) at lang.reflect.Method.invoke ZygoteInit.java:1199)
WebAppInterface.java:164 - callJavaScript (webView, "setWinsLosses", tierSolo.getWins(), tierSolo.getLosses());
실제로 스택 추적을 표시하는 것이 좋습니다 ... – jingx
스택 추적 추가 –
'dbFlex.getTier (summoner.getSummonerId());'가 null을 반환 할 가능성을 고려 했습니까? – Zircon