我已经创建了标签视图,现在我正在尝试使用intent完成任务后再次选项卡,但应用程序强制关闭。我的错误日志如下:
06-09 12:48:35.261: WARN/dalvikvm(439): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
06-09 12:48:35.261: ERROR/AndroidRuntime(439): Uncaught handler: thread main exiting due to uncaught exception
06-09 12:48:35.273: ERROR/AndroidRuntime(439): java.lang.NullPointerException
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at com.androidpeople.tab.MobiintheMorningActivity$HelloWebViewClient.onPageFinished(MobiintheMorningActivity.java:107)
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:222)
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at android.os.Handler.dispatchMessage(Handler.java:99)
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at android.os.Looper.loop(Looper.java:123)
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at android.app.ActivityThread.main(ActivityThread.java:4203)
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at java.lang.reflect.Method.invokeNative(Native Method)
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at java.lang.reflect.Method.invoke(Method.java:521)
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
06-09 12:48:35.273: ERROR/AndroidRuntime(439): at dalvik.system.NativeStart.main(Native Method)
06-09 12:48:35.293: INFO/Process(52): Sending signal. PID: 439 SIG: 3
06-09 12:48:35.293: INFO/dalvikvm(439): threadid=7: reacting to signal 3
06-09 12:48:35.332: INFO/dalvikvm(439): Wrote stack trace to '/data/anr/traces.txt'
06-09 12:48:35.502: INFO/System.out(439): #: 2
06-09 12:48:35.502: WARN/dalvikvm(439): threadid=31: thread exiting with uncaught exception (group=0x4001aa28)
06-09 12:48:35.523: ERROR/AndroidRuntime(439): Uncaught handler: thread exiting due to uncaught exception
06-09 12:48:35.523: ERROR/AndroidRuntime(439): java.lang.NullPointerException
06-09 12:48:35.523: ERROR/AndroidRuntime(439): at com.androidpeople.tab.MobiintheMorningActivity$t2.run(MobiintheMorningActivity.java:218)
06-09 12:48:35.523: ERROR/AndroidRuntime(439): at java.lang.Thread.run(Thread.java:1060)
06-09 12:48:35.543: INFO/Process(52): Sending signal. PID: 439 SIG: 3
06-09 12:48:35.543: WARN/ActivityManager(52): Process com.androidpeople.tab has crashed too many times: killing!
06-09 12:48:35.552: INFO/dalvikvm(439): threadid=7: reacting to signal 3
06-09 12:48:35.552: INFO/dalvikvm(439): Wrote stack trace to '/data/anr/traces.txt'
06-09 12:48:35.602: INFO/Process(52): Sending signal. PID: 439 SIG: 9
06-09 12:48:35.683: INFO/WindowManager(52): WIN DEATH: Window{4394ce88 com.androidpeople.tab/com.androidpeople.tab.CopyOfTabBarExample paused=true}
06-09 12:48:45.592: WARN/ActivityManager(52): Launch timeout has expired, giving up wake lock!
当我尝试从日志中查找错误时,它会向我显示此行。
我的完整代码:
package com.androidpeople.tab;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
public class activityname extends Activity {
/**
*================== VARIABLE AND CONTROL DECLARATION========
*/
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
ProgressBar myProgressBar;
int myProgress = 0;
private static final String LOG_TAG = "Test";
final Context myApp = this;
private WebView mWebView;
Button btn, btn1;
/**
* ==================== URL =================================
*/
private static final String strURL = "http://www.myURL";
/**
* ========================================================================
* ==
*/
final Activity activity = this;
/**
*========END OF VARIABLE AND CONTROL DECLARATION==============
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainforload);
Button btn=(Button) findViewById(R.id.My_btn);
mWebView = (WebView) findViewById(R.id.webviewHelp);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new MyjavascriptInterface(), "HTMLOUT");
mWebView.loadUrl(strURL);
mWebView.setWebViewClient(new HelloWebViewClient());
}
/**
*
* =================THIS IS USED FOR GETTING SOURCE CODE===================
*
*/
public class MyjavascriptInterface {
public void showHTML(String html) {
try {
String struniqID = "<div id=\"uniqueid\">";
mWebView = (WebView) findViewById(R.id.webviewHelp);
if (html.toString().contains(struniqID)) {
GlobalVariable.SetTemp(1);
String temp[] = html.toString().split(struniqID);
String strDiv = "</div>";
String temp1[] = temp[1].split(strDiv);
String strUidPswd = "&username=test&password=test";
String s = temp1[0].concat(strUidPswd);
GlobalVariable.Setstr(s.toString());
try {
new Thread(new t(), "" + "").start();
// new temp().start();
} catch (Exception e) {
}
} else {
GlobalVariable.SetTemp(0);
new Thread(new t2(), "" + "").start();
}
} catch (Exception e) {
Log.i(LOG_TAG, e.toString() + "");
Toast.makeText(myApp, e.toString(), Toast.LENGTH_LONG).show();
}
}
}
public class HelloWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
view
.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
if (GlobalVariable.GetTemp() == 1) {
final Button btn=(Button) findViewById(R.id.My_btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
try {
btn.requestFocus();
Intent i = new Intent(
activityname.this,
anotheractivityname.class);
finish();
startActivity(i);
// finish();
} catch (Exception e) {
Log.i(LOG_TAG, e.toString());
}
}
});
} else {
btn = (Button) findViewById(R.id.My_btn);
btn.requestFocus();
btn.setVisibility(View.GONE);
}
super.onPageFinished(view, url);
}
@Override
public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
// TODO Auto-generated method stub
if (GlobalVariable.GetTemp() == 1) {
}
return super.shouldOverrideKeyEvent(view, event);
}
}
/**
* ==============================THIS CLASS FOR DISPLAYING
* BUTTON============================
*/
class t implements Runnable {
private int countDown = 2;
public String toString() {
return "#" + Thread.currentThread().getName() + ": " + countDown;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
System.out.println(this);
btn.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (GlobalVariable.GetTemp() == 1) {
btn.requestFocus();
btn.setVisibility(0);
// int i=0;
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
try{
Intent i = new Intent(
activityname.this,
anotheractivity.class);
finish();
startActivity(i);
// finish();
}catch (Exception e) {
// TODO: handle exception
}
// quit();
}
});
}
if (GlobalVariable.GetTemp() == 0) {
btn.requestFocus();
btn.setVisibility(4);
}
}
});
if (--countDown == 1)
return;
}
}
}
// =================================
class t2 implements Runnable {
private int countDown = 2;
public String toString() {
return "#" + Thread.currentThread().getName() + ": " + countDown;
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
System.out.println(this);
btn.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (GlobalVariable.GetTemp() == 0) {
try{
btn.requestFocus();
btn.setVisibility(4);}catch (Exception e) {
// TODO: handle exception
}
}
}
});
if (--countDown == 1)
return;
}
}
}
/**
* =========== THIS CUSTOM METHOD IS FOR CLOSING THE CURRENT EXECUTING
* PROCESS===================
*/
public void quit() {
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
System.exit(0);
}
}
这是我的tabbar文件,它扩展了TabActivity
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.maiin);
final TabHost tabHost = (TabHost) getTabHost();
try {
tabHost.addTab(createTab(activityname.class, "Welcome",
"Welcome", R.drawable.tab_icon_events));
tabHost.addTab(createTab(anotheractivityname.class, ".Mp3List", ".Mp3List",
R.drawable.tab_icon_pitchforkfm));
tabHost.addTab(createTab(AboutUs.class, "AboutUs", "AboutUs",
R.drawable.tab_icon_home));
tabHost.addTab(createTab(ExitActivity.class, "EXIT", "EXIT",
R.drawable.tab_icon_tv));
tabHost.setCurrentTab(1);
} catch (Exception e) {
// TODO: handle exception
}
tabHost.getTabWidget().getChildAt(0).getLayoutParams().width = 85;
tabHost.getTabWidget().getChildAt(1).getLayoutParams().width = 85;
tabHost.getTabWidget().getChildAt(2).getLayoutParams().width = 85;
tabHost.getTabWidget().getChildAt(3).getLayoutParams().width = 85;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(false);
return true;
}
return super.onKeyDown(keyCode, event);
}
private TabSpec createTab(final Class<?> intentClass, final String tag,
final String title, final int drawable)
{
final Intent intent = new Intent().setClass(this, intentClass);
final View tab = LayoutInflater.from(getTabHost().getContext())
.inflate(R.layout.tab, null);
((TextView) tab.findViewById(R.id.tab_text)).setText(title);
((ImageView) tab.findViewById(R.id.tab_icon))
.setImageResource(drawable);
return getTabHost().newTabSpec(tag).setIndicator(tab)
.setContent(intent);
}
}
答案 0 :(得分:1)
你得到一个NullPointerException ...这意味着你的代码中有一些东西指向null。从我看到的,也许是你的按钮btn ???在if子句中,btn似乎没有被初始化。在设置监听器之前,尝试在if块中添加以下行。
btn = (Button) findViewById(R.id.My_btn);
答案 1 :(得分:0)
你需要在内部活动类中初始化按钮,否则它不会工作,然后在WebViewClient类中使用该按钮。