为什么我的开始活动不起作用?

时间:2014-05-04 01:47:51

标签: java android

首先我想说的是我是Android新手。我想从Activity开始AsyncTask,但我不知道为什么会收到错误。

@Override
protected void onPostExecute(String string) {
    // Now we have your JSONObject, play around with it.

    //MainActivity.t.setText(string);

    MainActivity.mainActivity.startPlataform();
}

这是我的onPostExecute()当一切正常并且我从静态MainActivity变量访问时,但我不知道另一种方法。

public class MainActivity extends Activity {

    public static MainActivity mainActivity;
    public Intent detailIntent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mainActivity = new MainActivity();
        detailIntent = new Intent(this, Main_Plataform.class);
    }

    ...

    public void startPlataform() {
        try {
            startActivity(detailIntent);
        } catch (Exception e) {
            Log.e("Fehler!", "Error why ???" + e.toString());
        }
    }
}

当我在startPlataform()中使用Button调用MainActivity方法时效果很好 但它不在onPostExecute()中。我认为关于静态变量的事情是错误的。

这是我的logcat:

05-03 20:41:37.403: E/AndroidRuntime(1562): FATAL EXCEPTION: main
05-03 20:41:37.403: E/AndroidRuntime(1562): Process: com.example.patronusgps, PID: 1562
05-03 20:41:37.403: E/AndroidRuntime(1562): java.lang.NullPointerException
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.app.Activity.startActivityForResult(Activity.java:3424)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.app.Activity.startActivityForResult(Activity.java:3385)    
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.app.Activity.startActivity(Activity.java:3627)    
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.app.Activity.startActivity(Activity.java:3595)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
com.example.patronusgps.MainActivity.startPlataform(MainActivity.java:72)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
com.example.patronusgps.JSONParser.onPostExecute(JSONParser.java:106)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
com.example.patronusgps.JSONParser.onPostExecute(JSONParser.java:1)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.os.AsyncTask.finish(AsyncTask.java:632)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.os.AsyncTask.access$600(AsyncTask.java:177)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.os.Handler.dispatchMessage(Handler.java:102)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.os.Looper.loop(Looper.java:136)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
android.app.ActivityThread.main(ActivityThread.java:5017)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
java.lang.reflect.Method.invokeNative(Native Method)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
java.lang.reflect.Method.invoke(Method.java:515)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-03 20:41:37.403: E/AndroidRuntime(1562):     at
dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

首先删除所有内容:

public static MainActivity mainActivity;

或者这个:

mainActivity = new MainActivity();

这两件事都是完全错误的。你永远不应该像这样Activity,并且永远不要在静态变量中引用Activity。这只会导致问题并弄乱您的应用。

您还可以从detailIntent

中删除MainActivity的定义
public Intent detailIntent;

并从onCreate()方法中删除其声明:

detailIntent = new Intent(this, Main_Plataform.class);

你不需要所有这些。如果您想开始Activity每次都创建一个新的Intent

每当你想要启动任何Activity时,无论你想在哪个代码中执行它,你都可以这样做:

Intent intent = new Intent(context, <Activity you want to start>.class);
startActivity(intent);

您需要将Context的{​​{1}}传递给Activity以从那里开始活动,在此示例中,我开始AsyncTask

MainActivity