我是一名新的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