我是一名新的Android開發人員,我有一個問題。用戶登錄後,我需要從外部獲取一些數據URL
,並將其顯示在我的一項活動中。但我一直在閱讀並發現:在Android中停止/恢復活動和onCreate
當您的活動從停止狀態回到前臺時,它會收到對onRestart()的調用。系統還會調用onStart()方法,每當您的活動變爲 可見(無論是第一次重新啓動還是創建)時都會發生這種情況。
這
注意:您的活動將被銷燬,每個 用戶旋轉屏幕上的時間重建。當屏幕更改方向時, 系統會破壞並重新創建前景活動,因爲 屏幕配置已更改,您的活動可能需要加載 替代資源(例如佈局)。
因此,它看起來像我不應該得到我需要在onCreate
方法上的數據。那麼在哪?在之前的活動中並將數據保存在手機內存中?這對我來說聽起來不太好。
在此先感謝。
編輯
我使用AsyncTask
的建議,但每次我打開手機的方向,onCreate
方法被調用。
我的MainActivity:
public class MainActivity extends Activity implements AsyncResponse {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ReadJSONTask jsonTask = new ReadJSONTask();
jsonTask.delegate = this;
jsonTask.execute("http://www.myweb.com/myscript.php");
}
@Override
public void processFinish(String output) {
Toast.makeText(getApplicationContext(), output, Toast.LENGTH_LONG).show();
}
}
ReadJSONTask類:
public class ReadJSONTask extends AsyncTask<String, Void, String> {
public AsyncResponse delegate = null;
public String res;
public Boolean finish = false;
@Override
protected String doInBackground(String... url) {
String response = null;
String adres = url[0];
URL url_HTTPRequest = null;
try {
url_HTTPRequest = new URL(adres);
response = transfer(url_HTTPRequest);
} catch (MalformedURLException e) {
Log.e("URL ERROR", "MalformedURLException");
} catch (Exception e) {
Log.e("URL ERROR", "exc");
}
return response;
}
@Override
protected void onPostExecute(String result) {
Log.d("mylog", "result= " + result);
delegate.processFinish(result);
}
public String transfer(URL url) throws IOException {
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// inputStream = url.openStream();
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bin = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String line = bin.readLine();
StringBuffer sb = new StringBuffer();
while (line != null) {
sb.append(line);
sb.append("\r\n");
line = bin.readLine();
}
inputStream.close();
return sb.toString();
}
}
和接口僅僅是:
public interface AsyncResponse {
void processFinish(String output);
}
正如我所說的,每次我打開手機方向的所有異步過程被執行(並出現Toast
)。這正是我想要避免的原因。
什麼樣的數據? – SaNtoRiaN