アプリにスプラッシュ スクリーンを実装したいと考えています。私はすでにこれをしました。しかし、現時点では 3 秒待ってから MainActivity クラスを呼び出します。それに関する問題は、ロードするデータがあり、現在のセットアップではユーザーが 2 回待機する必要があることです。すべてのデータをロードするスプラッシュ スクリーンが必要です。すべてが発生する MainActivity クラスがあり、SplashScreen クラスがあります。
バックグラウンドで実行したいメソッドは 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 はコメントで、クラスのインスタンスを間違って作成したと述べました。回答を詳しく教えていただければ幸いです。
更新番号 2
現在の SplashScreen-Code は次のとおりです。
パッケージ 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 解析コードは次のとおりです。スプラッシュ画面なしでメインアクティビティを開始しただけで、問題なく動作することに注意してください
更新番号 3
行ごとにブレークポイントを作成してデバッグを開始しました。この線で飛び出す
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 を返します。k は 0 です。では、なぜ Null Pointer Exception なのですか?