0

很抱歉问了这个简单的问题,但我很困惑。在我的代码中,我想在我的一种方法完成后启动一个新活动。所以我只是需要有人告诉我最好放在哪里Intent I = new Intent(MainActivity.this, ListView.class); startActivity(I);

我在这里尝试过,但有人告诉我这可能会导致错误

public class MainActivity extends Activity {

    EditText et;
    Button getanswer;

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


        Button getanswer = (Button) findViewById(R.id.button1);
        getanswer.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            new asynctask().execute();
            Intent I = new Intent(MainActivity.this, ListView.class);
            startActivity(I);
 }

        });
    } 
}

      class asynctask extends AsyncTask<String, Void, JSONObject> {

             private static final String TAG_RESULTS = "ResultsSet";
             private static final String TAG_SUBJECT = "Subject";
             private static final String TAG_NUMANSWERS = "NumAnswers";
             private static final String TAG_QUESTION = "Question";
             private static final String TAG_QUESTION_CONTENT = "Content";
             private static final String TAG_QUESTION_CHOSENANSWER = "ChosenAnswer";
             private static final String TAG_QUESTION_ANSWERS = "Answers";
            public JSONArray json;

         @Override
         protected JSONObject doInBackground(String... params) {

             JSONParsser jParser = new JSONParsser();

             String URI = "http://example.com/json";

             JSONObject json = jParser.getJSONFromURI(URI);

             return json ;

         }{ }
             @Override
             protected void onPostExecute(JSONObject json) {

                 JSONArray ResultsSet = null; {
                 try {
                     ResultsSet = json.getJSONArray(TAG_RESULTS);
                } catch (JSONException e) {
                   e.printStackTrace();
                }
            return;
        }}}

我也尝试过像大多数人建议的那样听到它,但我在“MainActivity.this”下面收到一个错误,上面写着“在范围内没有可以访问 MainActivity 类型的封闭实例”。此外,我在“startActivity(I);”下得到一个错误 它说我必须创建一个名为“startActivity(Intent)”的全新方法

public class MainActivity extends Activity {

    EditText et;
    Button getanswer;

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


        Button getanswer = (Button) findViewById(R.id.button1);
        getanswer.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            new asynctask().execute();
        }

        });
    } 
}

      class asynctask extends AsyncTask<String, Void, JSONObject> {

             private static final String TAG_RESULTS = "ResultsSet";
             private static final String TAG_SUBJECT = "Subject";
             private static final String TAG_NUMANSWERS = "NumAnswers";
             private static final String TAG_QUESTION = "Question";
             private static final String TAG_QUESTION_CONTENT = "Content";
             private static final String TAG_QUESTION_CHOSENANSWER = "ChosenAnswer";
             private static final String TAG_QUESTION_ANSWERS = "Answers";
            public JSONArray json;

         @Override
         protected JSONObject doInBackground(String... params) {

             JSONParsser jParser = new JSONParsser();

             String URI = "http://rxample.com/json";

             JSONObject json = jParser.getJSONFromURI(URI);

             return json ;

         }{ }
             @Override
             protected void onPostExecute(JSONObject json) {

                 JSONArray ResultsSet = null; {
                 try {
                     ResultsSet = json.getJSONArray(TAG_RESULTS);
                } catch (JSONException e) {
                   e.printStackTrace();
                }
                 Intent I = new Intent(MainActivity.this, ListView.class);
                 startActivity(I);
            return;
        }}}

有人可以告诉我为什么会弹出这些错误以及放置此代码的正确位置。

4

3 回答 3

0
 @Override
    public void onClick(View v) {
        new asynctask().execute();
        Intent I = new Intent(MainActivity.this, ListView.class);
        startActivity(I);

为什么要调用 ListView.class,这是Android 的预定义类。这会让你无处可去。创建一个新的 Activity 类,然后传入 Intent。

于 2013-07-26T08:05:09.337 回答
0

第一个示例需要注意的是,新活动将在异步任务在后台运行时启动并运行。如果您不需要新活动中的任务返回的任何数据,这不是问题。

在第二个示例中,问题是您对“this”的引用。您在异步任务的类定义中调用它,因此不引用主要活动。要解决此问题,请在主活动中创建一个方法,例如 launchNewActivity() 并将 startActivity() 调用放入其中并从异步任务中调用它。

@Override
protected void onPostExecute(JSONObject json) {
    launchNewActivity();
}

然后再往上:

private void launchNewActivity(){
    startActivity(new Intent(MainActivity.this, ListView.class));
}

其中哪一个最适合您,取决于您是否需要等待任务完成才能开始新活动。

于 2013-07-26T07:54:50.133 回答
0

您不能将 ListView 作为活动启动,因为 ListView 不是活动它的视图:) 您必须创建新的 Activity,然后在 xml 和 onCreate 方法中定义您的视图,您必须 setContentView(R.layout.your_view); 您可以在此布局中使用 listView。

然后你可以打电话

Intent I = new Intent(MainActivity.this, YourActivity.class);
        startActivity(I);
于 2013-07-26T11:14:31.593 回答