首先我想说的是我是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)
答案 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