Android:在方法之后启动新活动时出错

时间:2013-07-26 07:46:17

标签: android class android-intent android-activity

我很抱歉问这个简单的问题,但我很困惑。在我的代码中,我希望在完成其中一个方法后启动一个新活动。所以我只是需要有人告诉我放置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;
        }}}

有人可以告诉我为什么会弹出Ithese错误,以及放置此代码的适当位置。

3 个答案:

答案 0 :(得分:0)

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

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

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

然后进一步说明:

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

哪一项最适合您取决于您​​是否需要在开始新活动之前等待任务完成。

答案 1 :(得分: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。

答案 2 :(得分:0)

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

然后你可以打电话

Intent I = new Intent(MainActivity.this, YourActivity.class);
        startActivity(I);