私はアンドロイドでwebserviceを使って作業しています。私はlynda.comの チュートリアルに従っていました。私は塔の中を通りました。私はwebserviceからデータ を取得し、それを "ListView"に表示します。私はMainContactクラス と、IntentServcieを拡張するMyServiceクラスと、パーセルブルを実装するPOJOクラス名Courseを持っています。それは私が をクリックすると得られるWebサービスの応答の一部を保持します。たMyServiceクラスでonSaveInstanceStateでの作業方法android orientation change
public class MainActivity extends AppCompatActivity {
//member variables I have
ListView listview;
List<String> courseList = new ArrayList<>();
ArrayAdapter<String> adapter;
Course[] courses;
......
public void runClickHandler(View view) {
Intent intent = new Intent(this, MyService.class);
//the url where I extract the JSON data
intent.setData(Uri.parse(JSON_URL));
startService(intent);
}
Webサービスからの応答をダウンロードし、 私はJSON、パッケージにデータを変換し、LocalBroadcastManagerを使用してMainActivityに送信するGSONライブラリを使用して接続
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.addRequestProperty("Authorization", TOKEN);
を開きます。私のMainActivityで
protected void onHandleIntent(Intent intent) {
...........
messageIntent.putExtra(MY_SERVICE_PAYLOAD, courseList);
//we package the data we want to share to the rest of the applicaiton
LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getApplicationContext());
manager.sendBroadcast(messageIntent);
}
私は、データを取得し、リストビューに表示するBroadcastReceiverを使用しています。 BroadcastReceiverのOnReceiveメソッドの内部。私は、画面の向きを変更すると、この
public void onReceive(Context context, Intent intent) {
courses = (Course[]) intent.getParcelableArrayExtra(MyService.MY_SERVICE_PAYLOAD);
for (Course course : courses) {
courseList.add(course.getCourseTitle());
}
Collections.sort(courseList);
adapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_expandable_list_item_1,
courseList);
listview.setAdapter(adapter);
}
問題が来ています。私がwebserviceから得たデータは破壊されます。私はXMLファイルの設定を推奨し、画面サイズの変更を調整しました。これは「良いアプローチ」ではないとも考えられます。私が使っていると思ったのは、ここやオンラインの他の投稿で提案されているように、onSaveInstanceStateを無効にすることです。私は作品をつなぎ、オリエンテーションの変更中に自分のデータを保持するのに苦労します。 私はどのように物事を処理する必要がありますか?あなたが読んだ良い記事や、上記の私の実装に基づいてどのように問題に近づいていくのか、私は感謝しています。 if(savedInstanceState!= null)をチェックした後、display onCreateをどのように処理するのですか?どのメンバー変数データを保存する必要がありますか?すべてがnull onDestroy()に変更されますか?これは私が
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LocalBroadcastManager.getInstance(getApplicationContext())
.registerReceiver(mBroadcastReceiver,new IntentFilter(MyService.MY_SERVICE_MESSAGE));
listview = (ListView) findViewById(R.id.list);
}
私がonSaveInstanceStateに提案した内容を追加すると、第2引数の型が間違っています。見つかった: 'java.util.List'、必須: 'java.util.ArrayList <?拡張するandroid.os。Parcelable> –
user1986244
私はあなたのフィードバックをout.putParcelableArray( "COURSES"、courses)を使用するように更新しました。 onCreate()私はコースコースを取得しました=(Course [])savedInstanceState.getParcelableArray( "COURSES");私はまだコースを表示する主要な問題があります。当初、コースはonClickトリガーで表示されました。画面の回転が表示されます – user1986244