Я хочу реализовать заставки в моем приложении. Я уже это сделал. Но на данный момент он просто ждет 3 секунды, а затем вызывает класс MainActivity. Проблема в том, что у меня есть данные для загрузки, и с текущей настройкой пользователь должен ждать два раза. Я хочу, чтобы экран заставки загружал все данные. У меня есть класс MainActivity, где все происходит, и у меня есть класс SplashScreen.Заставка экрана с AsyncTask
Метод, который я хочу запустить в фоновом режиме, находится в моем MainClass. Поэтому в основном у меня есть заставка класс, как этот
public class SplashScreenActivity extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
protected void onPostExecute(Void... params) {
// TODO Auto-generated method stub
}
protected void onCancelled() {
// TODO Auto-generated method stub
}
}
Я также реализован, но не копировали импорта и пакетов, так что не должно быть проблемой. Теперь, если я правильно понял, мне нужно написать задачу, которая должна быть выполнена в методе doInBackground. Поэтому я в основном должен вызывать метод из моего другого класса активности, не так ли?
public MainActivity mA = new MainActivity();
, а затем в методе я хотел бы написать mA.parseXMLfromURL();
И после этого я начал бы намерение главного класса в onPostExecute-метода, как это?
protected void onPostExecute(Void... params) {
Intent mainClass = new Intent(SplashScreenActivity.this, MainActivity.class);
startActivity(mainClass);
}
Если требуется дополнительная информация, я с удовольствием подробно расскажу подробнее.
ОБНОВЛЕНИЕ
Ну, после того, как ваши комментарии я попробовал это немного по-другому.
Это мой метод OnCreate
public void onCreate(Bundle savedInstanceState) {
StrictMode.setThreadPolicy(policy);
super.onCreate(savedInstanceState);
sv = new ScrollView(this);
layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
sv.addView(layout);
setContentView(sv);
new SplashScreenActivity().execute("URL TO FILE");
}
И это SplashScreenActivity
public class SplashScreenActivity extends AsyncTask<String, Void, Void> {
public MainActivity mA = new MainActivity();
protected void onPostExecute(Void... params) {
}
protected void onCancelled() {
// TODO Auto-generated method stub
}
@Override
protected Void doInBackground(String... params) {
mA.parseXMLfromURL(params);
return null;
}
}
Но это просто возвращает пустой экран. Однако, если я вызываю parseXMLfromURL в моем основном действии, он работает отлично.
@ Raghunandan сказал в комментариях, что я ошибочно создал экземпляр класса. Был бы рад, если бы вы могли разработать свой ответ.
UPDATE НОМЕР ДВА
Текущий SplashScreen-код имеет следующий вид:
пакет de.activevalue.T1000flies;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
public class SplashScreenActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
new mTask().execute();
}
private class mTask extends AsyncTask<Void, Void, Void>{
MainActivity mA = new MainActivity();
@Override
protected Void doInBackground(Void... arg0) {
mA.parseXML();
return null;
}
protected void onPostExecute(Void... params){
Intent i = new Intent(SplashScreenActivity.this, MainActivity.class);
startActivity(i);
finish();
}
}
}
С этим кодом приложения просто заклинивание на заставку. Это похоже на проблему с моей XML-парсией. Вот XML-Parsing-код. Обратите внимание, что она работает без каких-либо проблем, когда я только начала основной деятельности wihtout заставки
UPDATE НОМЕР ТРИ
Я только начал отлаживать, сделав линию точек останова в каждой строку.Он выскакивает на этой линии
rankingDate [k] = new TextView(this);
Остальной код
for(int k = 0; k < metaList.getLength(); k++){
Node metaNode = metaList.item(k);
System.out.println(metaList.getLength());
rankingDate [k] = new TextView(this);
rdate [k] = new TextView(this);
numberOE [k] = new TextView(this);
Element metaElement = (Element) metaNode;
NodeList rankingDateList = metaElement.getElementsByTagName("date");
Element rankingDateElement = (Element) rankingDateList.item(0);
rankingDateList = rankingDateElement.getChildNodes();
rankingDate [k].setText("RankingDate: " + ((Node) rankingDateList.item(0)).getNodeValue());
layout.addView(rankingDate[k]);
xmlSerializer.startTag(null, "date");
xmlSerializer.text(((Node) rankingDateList.item(0)).getNodeValue());
xmlSerializer.endTag(null, "date");
}
System.out.println дает мне 1. И к 0. Итак, почему это Исключение нулевого указателя?
создание экземпляра класса активности «MainActivity mA = new MainActivity()»? Если это не так, то – Raghunandan
У вас есть данные для загрузки в MainActivity. Там также есть еще одна AsyncTask. Поэтому пользователь ждет дважды. это не ваша проблема? – Nizam
Привет, я обновил его. См. Жирный ** обновление ** для информации. Надеюсь, поможет! – Musterknabe