Java 当我创建意图时,他创建的值为null

Java 当我创建意图时,他创建的值为null,java,android,android-intent,Java,Android,Android Intent,我的应用程序中有下一个代码,我尝试启动活动,但应用程序强制在emulator中关闭 public class LoginActivity extends Activity { static Button btnLogin; public static final String TAG="---------2-----"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(

我的应用程序中有下一个代码,我尝试启动活动,但应用程序强制在emulator中关闭

  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在异步任务后工作。这是我的任务

     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; 
    }
公共类AscTaskLogin扩展了AsyncTask{
物流活动;
公共AscTaskLogin(活动){
this.mActivity=mActivity;
}
公共静态最终字符串标记=“-----------2----------”;
受保护的void onPreExecute(){
LOGV(标记为“PreExecite------”);
}
受保护的void onPostExecute(布尔结果){
LOGV(标签,“PostExecute------”;
意图i=新意图();
i、 setClass(mActivity,Copy.class);
i、 设置标志(意图、标志、活动、新任务);
恒星触觉(i);
}   
@凌驾
受保护的布尔doInBackground(字符串…sendData){
试一试{
时间单位。秒。睡眠(1);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}           
//TODO自动生成的方法存根
LOGV(标签,“doInBackground-------”;
返回true;
}
}

在清单文件中,我写了关于活动的内容

     <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)
02-04 14:55:49.639:V/-----------2-----(3065):背景------
02-04 14:55:49.639:V/-----------2-----(3065):死后-------
02-04 14:55:49.639:D/AndroidRuntime(3065):关闭虚拟机
02-04 14:55:49.639:W/dalvikvm(3065):threadid=1:线程以未捕获异常退出(组=0xa000f180)
02-04 14:55:49.639:E/AndroidRuntime(3065):致命异常:主
02-04 14:55:49.639:E/AndroidRuntime(3065):java.lang.NullPointerException
02-04 14:55:49.639:E/AndroidRuntime(3065):位于android.content.ComponentName.(ComponentName.java:75)
02-04 14:55:49.639:E/AndroidRuntime(3065):在android.content.Intent.setClass(Intent.java:5502)上
02-04 14:55:49.639:E/AndroidRuntime(3065):在com.example.notime.asctasklin.onPostExecute(asctasklin.java:28)
02-04 14:55:49.639:E/AndroidRuntime(3065):在com.example.notime.asctasklin.onPostExecute(asctasklin.java:1)
02-04 14:55:49.639:E/AndroidRuntime(3065):在android.os.AsyncTask.finish(AsyncTask.java:602)上
02-04 14:55:49.639:E/AndroidRuntime(3065):在android.os.AsyncTask.access$600(AsyncTask.java:156)
02-04 14:55:49.639:E/AndroidRuntime(3065):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
02-04 14:55:49.639:E/AndroidRuntime(3065):在android.os.Handler.dispatchMessage(Handler.java:99)上
02-04 14:55:49.639:E/AndroidRuntime(3065):在android.os.Looper.loop(Looper.java:137)
02-04 14:55:49.639:E/AndroidRuntime(3065):位于android.app.ActivityThread.main(ActivityThread.java:4424)
02-04 14:55:49.639:E/AndroidRuntime(3065):位于java.lang.reflect.Method.Invokenactive(本机方法)
02-04 14:55:49.639:E/AndroidRuntime(3065):在java.lang.reflect.Method.invoke(Method.java:511)
02-04 14:55:49.639:E/AndroidRuntime(3065):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-04 14:55:49.639:E/AndroidRuntime(3065):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-04 14:55:49.639:E/AndroidRuntime(3065):在dalvik.system.NativeStart.main(本机方法)

我认为-in-Intent使用value-null创建。我不知道如何解决这个问题。

在使用MyContext之前,您永远不会初始化它,这就是导致您的
NullPointerException
的原因:

i.setClass(MyContext, Copy.class); 
问题在于您初始化活动的方式。您不应该初始化
活动
实例,让它自己启动。我建议从您以前的
活动开始
活动


另外,作为旁注,变量应该以小写字母开头。

在创建时更新您的
oncreate
,如下所示:

    MyContext = this;

您应该直接从
onPostExecute
调用intent,如下所示

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);       
 }
}
公共类AscTaskLogin扩展了AsyncTask{
物流活动;
公共AscTaskLogin(活动){
这个。活动=活动;
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔结果;
//做点什么
返回结果;
}
@凌驾
受保护的void onPostExecute(布尔结果){
意图i=新意图();
i、 setClass(mActivity,Copy.class);
i、 设置标志(意图、标志、活动、新任务);
恒星触觉(i);
}
}

熟悉Android的人可能能够提供更详细的帮助,但简单的回答是,在创建活动之前,您的活动的返回方法被调用。您需要保存上下文并将其传递给回调专用对象(称为闭包)的构造函数,或者确保在回调方法中重新初始化它。这是我的第一个应用程序,我不久前开始学习android。你是怎么做到的?请提供示例上的链接。AscTaskLogin必须将数据传输到服务器并接收“true”或“false”。在RsultAsync-启动新活动中,我应该在哪里启动活动?你是怎么做到的?抱歉,但我真的不明白。哦,那么您希望相同的活动实例启动AsyncTask并对结果作出反应?是的。在一个活动中,这两个动作。但我想运行不同的活动,具体取决于-true或false。我尝试在PostExecute(布尔结果){LoginActivity.LOGV(标记,“PostExecute------”);Intent I=new Intent();I.setClass(LA,Copy.class);I.setFlags(Intent.FLAG_Activity_new_TASK);LA.startActivity(I);