2013-07-26 4 views
0

Прошу прощения за этот простой вопрос, но я совершенно смущен. В моем коде я хочу запустить новое действие после завершения одного из моих методов. Так что я просто хочу, чтобы кто-то нужен, чтобы сказать мне, где лучше поставить Intent I = new Intent(MainActivity.this, ListView.class); startActivity(I);Android: ошибки запуска новой активности после метода

Я попытался его здесь, но мне сказали, что это может привести к ошибке

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 ошибки выскакивают и где надлежащее место, чтобы поместить этот код.

+0

Что такое ошибка? –

+0

Почему вы назвали свой второй класс ListView? –

ответ

0

В первом примере следует отметить, что новое действие запускается и запускается, пока задача async работает в фоновом режиме. Если вам не нужны какие-либо данные, возвращаемые задачей в новом действии, это не проблема.

Во втором примере проблема заключается в вашей ссылке на «это». Вы вызываете это внутри определения класса задачи async, поэтому основное действие не ссылается. Чтобы устранить это, создайте метод в своей основной деятельности, например, launchNewActivity() и поместите в него вызов startActivity() и вызовите его из задачи async.

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

Тогда дальше:

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

Какой из них наиболее подходит для вас, зависит от того, требуется ли вам ждать задачи закончить, прежде чем начать новый вид деятельности.

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

Почему вы называете ListView.class, Это Андроидом Предопределенного класса. Это ни к чему не приведет. Создайте новый класс активности, а затем перейдите к Intent.

0

Вы не можете запустить ListView как действие, потому что ListView не является его видом деятельности :) вам нужно создать новую активность, а затем определить вид в xml и в методе onCreate, который вы должны установитьContentView (R.layout.your_view); где вы можете иметь свой listView в этом макете.

Тогда вы можете позвонить

Intent I = new Intent(MainActivity.this, YourActivity.class); 
     startActivity(I); 
Смежные вопросы