当我创建Intent时,他创建了值null

时间:2014-02-04 06:56:30

标签: java android android-intent

我的应用程序中有下一个代码,我尝试启动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。我不知道如何解决这个问题。

3 个答案:

答案 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);       
 }
}