我想在 cocos2dx 2.1.4 层之上放置一个 WebView。我在 Helloworld.cpp 中有:
JniMethodInfo methodInfo;
if (!JniHelper::getStaticMethodInfo(methodInfo, "it/enigma/POP/POP", "DisplayWebView", "()V"))
{
// error handling
CCLog("err test");
}
CCLog("ok test");
methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
在 Pop.java 中
package it.enigma.POP;
import org.cocos2dx.lib.Cocos2dxActivity;
import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
import android.os.Bundle;
import android.content.Intent;///mio
import android.net.Uri;///mio
import android.widget.*;
import android.view.ViewGroup.LayoutParams;
import android.webkit.WebView;
//import android.app.Activity;
public class POP extends Cocos2dxActivity{
private static Cocos2dxActivity me = null;///mio
public static WebView _webView=null;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
me=this;
// _webView=new WebView(this);//(WebView)findViewById(R.id.web); //
// _webView.loadUrl("www.yahoo.it");
}
public Cocos2dxGLSurfaceView onCreateView() {
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
// POP should create stencil buffer
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
return glSurfaceView;
}
public static void DisplayWebView() {
me.runOnUiThread(new Runnable() {
public void run() {
// _webView.loadUrl("file:///android_asset/iCD_credits_it.html");
_webView=(WebView)me.findViewById(R.id.web); //
_webView.loadUrl("www.yahoo.it");
/* _webView.loadData(
"TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" +
"TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" +
"TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" +
"TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" +
"TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" + "TESTO DI PROVA </br>" +
"TESTO DI PROVA </br>",
"text/html", "utf-8");
*/
}
});
}
public static void openURL() {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse("file:///android_asset/iCD_credits_it.html"));
i.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
me.startActivity(i);
/*
File file=new File("/assets/iCD_credits_it.html");
Uri uri = Uri.fromFile(file);
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setDataAndType(uri, "text/html");
browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
//browserIntent.setData(uri);
me.startActivity(browserIntent);
*/
}
public static void openURL(String url) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
me.startActivity(i);
}
public static void test() {
LinearLayout layout = new LinearLayout(me);
layout.setOrientation(LinearLayout.VERTICAL); //Can also be done in xml by android:orientation="vertical"
Button btnTag = new Button(me);
btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btnTag.setText("Button");
btnTag.setId(1000);
layout.addView(btnTag);
me.setContentView(layout);
}
static {
System.loadLibrary("cocos2dcpp");
}
}
结果是 java.lang.nullpointer 异常。其他测试根本没有显示任何内容。有任何想法吗?谢谢