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