0

レイアウト (アプリの「ホーム」画面) にMainActivity関連付けられたアクティビティと、レイアウト (アプリの「概要」画面) に関連付けられたアクティビティの2 つがあります。main.xmlAboutActivityabout.xml

にいる間にAboutActivityAsync内のタスクがMainActivity引き続き にアクセスしようとしますmain.xml。その結果、アプリが動作しなくなります。

できる方法はありますか?

  • Asyncタスクを「一時停止」しMainActivity、ユーザーが元に戻ったときに「再開」します。AboutActivity
  • main.xmlまたはバックグラウンドで引き続きアクセスしますAboutActivity

追加情報:
MainActivityは起動アクティビティです。AboutActivity extends MainActivity. ユーザーは、「バージョン情報」画面に移動するかAboutActivity、オプション メニューを使用するように切り替えることができます。

内のAsyncタスクMainActivityは、ユーザーの現在の場所をテキストビューに入れます。about.xml静的テキストのみが含まれます。AboutActivity表示するだけabout.xmlです。

アクティビティについて:

public class AboutActivity extends MainActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.about);

    }

}

主な活動:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // Creating a new non-ui thread task to download Google place json data 
            PlacesTask placesTask = new PlacesTask();                                   

        // Invokes the "doInBackground()" method of the class PlaceTask
            placesTask.execute(sb.toString());
        }

        /** A class, to download Google Places */
    private class PlacesTask extends AsyncTask<String, Integer, String>{

        String data = null;

        // Invoked by execute() method of this object
        @Override
        protected String doInBackground(String... url) {
            //make asynctask wait for debugger
            //android.os.Debug.waitForDebugger();

            try{
                data = downloadUrl(url[0]);
            }catch(Exception e){
                 Log.d(DEBUG,e.toString());
            }
            return data;
        }

        // Executed after the complete execution of doInBackground() method
        @Override
        protected void onPostExecute(String result){            
                TextView curLoc = (TextView) findViewById(R.id.CurrentLocation);
                curLoc.setText(result);
        }

    }
}
4

2 に答える 2

0

AsyncTask は一時停止しないため、タスクが完了したとき、および textView にデータを表示するよりもバックグラウンド アクティビティを開始している間、データを一時的に保存できます。

于 2013-05-22T05:38:22.900 に答える
0

私は問題を解決しました。それは部分的に変数スコープの問題であり、部分的にはfindViewById()そこで使用できないという事実が原因で、常にnullを返します

curLocAsyncTask の onPostExecute で null です。

以下を削除しました。

TextView curLoc = (TextView) findViewById(R.id.CurrentLocation);

クラスMainActivityの属性としてcurLocを宣言しました

private TextView curLoc;

onCreate() にも入れます

curLoc = (TextView) findViewById(R.id.CurrentLocation);
于 2013-05-23T01:55:32.127 に答える