我刚刚开发了我的第一个android web浏览器项目, 但它并不顺利。
我发现我的MainActivity出现了一些崩溃, 但我找不到它。
这是我的MainActivity中的java代码。
package org.thunderdot.station;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText editText_search = (EditText) findViewById(R.id.EditText_Uri);
WebView webView = (WebView) findViewById(R.id.webview);
ImageButton button_search = (ImageButton) findViewById(R.id.ImageButton_Search);
ImageButton button_more = (ImageButton) findViewById(R.id.ImageButton_More);
WebSettings webSettings = webView.getSettings();
String default_url = "https://www.google.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView.setWebViewClient(new WebViewClient());
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadsImagesAutomatically(true);
webView.loadUrl(default_url);
}
public void onClick_button_search() {
String url = editText_search.getText().toString();
if(url.isEmpty()) {
Toast.makeText(getApplicationContext(), "Please Input URL First!", Toast.LENGTH_SHORT).show();
}
else {
webView.loadUrl(url);
}
}
这是我的activity_main.xml来源。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="org.thunderdot.station.MainActivity"
android:focusable="true"
android:focusableInTouchMode="true">
<LinearLayout
android:layout_width="368dp"
android:layout_height="60dp"
tools:layout_editor_absoluteY="8dp"
tools:layout_editor_absoluteX="8dp"
android:gravity="center"
android:id="@+id/LinerLayout_Search" >
<EditText
android:id="@+id/EditText_Uri"
android:layout_width="210dp"
android:layout_height="50dp"
android:hint="Input Url or Text"
android:inputType="textUri"
android:onClick="onClick_button_search"/>
<Space
android:layout_width="5dp"
android:layout_height="0dp" />
<ImageButton
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@mipmap/ic_launcher"
android:id="@+id/ImageButton_Search"/>
<Space
android:layout_width="5dp"
android:layout_height="0dp" />
<ImageButton
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@mipmap/ic_launcher"
android:id="@+id/ImageButton_More"/>
</LinearLayout>
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/LinerLayout_Search"
android:id="@+id/webview"> </WebView>
</RelativeLayout>
这也是我的logcat。
05-31 12:20:14.241 2709-2709/org.thunderdot.station I/art: Not late-enabling -Xcheck:jni (already on)
05-31 12:20:14.241 2709-2709/org.thunderdot.station W/art: Unexpected CPU variant for X86 using defaults: x86
05-31 12:20:14.431 2709-2709/org.thunderdot.station W/System: ClassLoader referenced unknown path: /data/app/org.thunderdot.station-1/lib/x86
05-31 12:20:14.441 2709-2709/org.thunderdot.station I/InstantRun: starting instant run server: is main process
05-31 12:20:14.542 2709-2709/org.thunderdot.station W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
05-31 12:20:14.661 2709-2729/org.thunderdot.station I/OpenGLRenderer: Initialized EGL, version 1.4
05-31 12:20:14.661 2709-2729/org.thunderdot.station D/OpenGLRenderer: Swap behavior 1
05-31 12:20:14.661 2709-2729/org.thunderdot.station W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
05-31 12:20:14.661 2709-2729/org.thunderdot.station D/OpenGLRenderer: Swap behavior 0
05-31 12:21:41.277 2709-2709/org.thunderdot.station D/AndroidRuntime: Shutting down VM
--------- beginning of crash
05-31 12:21:41.278 2709-2709/org.thunderdot.station E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.thunderdot.station, PID: 2709
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.thunderdot.station/org.thunderdot.station.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2567)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:120)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:151)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:31)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:55)
at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:33)
at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:33)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
at org.thunderdot.station.MainActivity.<init>(MainActivity.java:14)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2557)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
这是调用MainActivity的java源代码。
package org.thunderdot.station;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class TitleScreen extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_title_screen);
Button button = (Button)findViewById(R.id.Button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(view.getContext(), MainActivity.class);
startActivity(intent);
}
});
}
}