我的应用程序中有下一个代码,我尝试启动Activity,但应用程序强制在模拟器中关闭。
public class LoginActivity extends Activity {
static Button btnLogin;
public static final String TAG="---------2-----";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logining);
btnLogin =(Button)findViewById(R.id.btnLogon);
}
public void onClickLogon(View view){
AscTaskLogin LoginTask = new AscTaskLogin(this);
LoginTask.execute("1","1");
}
public static void LOGV(final String tag, String message){
if(BuildConfig.DEBUG){
Log.v(tag, message);
}
}
}
函数ResultAsync在AsyncTask之后工作。这是我的AsynckTask
public class AscTaskLogin extends AsyncTask<String, Void, Boolean> {
LoginActivity mActivity;
public AscTaskLogin(Activity activity) {
this.mActivity = mActivity;
}
public static final String TAG="---------2-----";
protected void onPreExecute() {
LoginActivity.LOGV(TAG, "PreExecite -------" );
}
protected void onPostExecute(Boolean result) {
LoginActivity.LOGV(TAG, "PostExecite -------" );
Intent i = new Intent();
i.setClass(mActivity, Copy.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mActivity .startActivity(i);
}
@Override
protected Boolean doInBackground(String... sendData) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
LoginActivity.LOGV(TAG, "doInBackground ------");
return true;
}
}
在Manifest文件中,我写了一些关于活动的文章。 <activity android:name="LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter></activity>
<activity android:name="MainActivity"></activity>
<activity android:name="Copy"></activity>
应用程序关闭并显示下一个错误
02-04 14:55:49.639: V/---------2-----(3065): doInBackground ------
02-04 14:55:49.639: V/---------2-----(3065): PostExecite -------
02-04 14:55:49.639: D/AndroidRuntime(3065): Shutting down VM
02-04 14:55:49.639: W/dalvikvm(3065): threadid=1: thread exiting with uncaught exception (group=0xa000f180)
02-04 14:55:49.639: E/AndroidRuntime(3065): FATAL EXCEPTION: main
02-04 14:55:49.639: E/AndroidRuntime(3065): java.lang.NullPointerException
02-04 14:55:49.639: E/AndroidRuntime(3065): at android.content.ComponentName.<init>(ComponentName.java:75)
02-04 14:55:49.639: E/AndroidRuntime(3065): at android.content.Intent.setClass(Intent.java:5502)
02-04 14:55:49.639: E/AndroidRuntime(3065): at com.example.notmyself.AscTaskLogin.onPostExecute(AscTaskLogin.java:28)
02-04 14:55:49.639: E/AndroidRuntime(3065): at com.example.notmyself.AscTaskLogin.onPostExecute(AscTaskLogin.java:1)
02-04 14:55:49.639: E/AndroidRuntime(3065): at android.os.AsyncTask.finish(AsyncTask.java:602)
02-04 14:55:49.639: E/AndroidRuntime(3065): at android.os.AsyncTask.access$600(AsyncTask.java:156)
02-04 14:55:49.639: E/AndroidRuntime(3065): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
02-04 14:55:49.639: E/AndroidRuntime(3065): at android.os.Handler.dispatchMessage(Handler.java:99)
02-04 14:55:49.639: E/AndroidRuntime(3065): at android.os.Looper.loop(Looper.java:137)
02-04 14:55:49.639: E/AndroidRuntime(3065): at android.app.ActivityThread.main(ActivityThread.java:4424)
02-04 14:55:49.639: E/AndroidRuntime(3065): at java.lang.reflect.Method.invokeNative(Native Method)
02-04 14:55:49.639: E/AndroidRuntime(3065): at java.lang.reflect.Method.invoke(Method.java:511)
02-04 14:55:49.639: E/AndroidRuntime(3065): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-04 14:55:49.639: E/AndroidRuntime(3065): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-04 14:55:49.639: E/AndroidRuntime(3065): at dalvik.system.NativeStart.main(Native Method)
我认为 - 在使用value创建的Intent中 - null。我不知道如何解决这个问题。
答案 0 :(得分:0)
在您使用之前,您永远不会初始化MyContext
,这是导致您NullPointerException
的原因。 :
i.setClass(MyContext, Copy.class);
问题在于您初始化活动的方式。您不应初始化Activity
实例并让它自行启动。我建议您从之前的Activity
开始Activity
。
另外,作为附注,变量应以小写字母开头。
答案 1 :(得分:0)
按此更新oncreate
:
MyContext = this;
答案 2 :(得分:0)
您应该直接从onPostExecute
调用意图,如下所示......
protected void onPostExecute(Boolean result) {
Intent i= new Intent();
i.setClass(LoginActivity.this, Copy.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(i);
}
您需要创建任务,并引用生成它的活动或上下文。
public class AscTaskLogin extends AsyncTask<String, Void, Boolean> {
LoginActivity mActivity;
public AscTaskLogin(Activity activity) {
this.mActivity = activity;
}
@Override
protected Boolean doInBackground(String... params) {
boolean result;
//do some stuff
return result;
}
@Override
protected void onPostExecute(Boolean result) {
Intent i= new Intent();
i.setClass(mActivity, Copy.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mActivity.startActivity(i);
}
}