【发布时间】:2014-08-20 19:16:08
【问题描述】:
所以基本上这是在应用程序启动时启动的类,它在从服务器获取 serverList 时显示启动画面,一旦它有了列表,它就会启动下一个活动,问题是这个活动似乎在下一个活动开始之前被调用两次,可能是什么原因造成的?
public class SplashScreen extends Activity {
public static DefaultHttpClient httpClient;
private String resp;
static String res;
private String errorMsg;
final Context context = this;
public static String cookieValue;
public static Cookie cookie;
String now_playing, earned;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash_screen);
String Wlcclient = "Yes";
String ClientType = "Android";
String Version = "0.103";
new PrefetchData().execute(Wlcclient,ClientType,Version);
}
public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception {
BufferedReader in = null;
try {
SplashScreen.httpClient = new DefaultHttpClient();
HttpPost request = new HttpPost(url);
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
HttpResponse response = SplashScreen.httpClient.execute(request);
List<Cookie> cookies = SplashScreen.httpClient.getCookieStore().getCookies();
cookie = cookies.get(0);
cookieValue = "ASPSESSIONIDCQTCRACT=" + cookie.getValue();
System.out.println("COOK" + cookieValue);
Header[] headers = response.getAllHeaders();
System.out.println("length" + headers.length);
for (int i=0; i < headers.length; i++) {
Header h = headers[i];
System.out.println( "Header names: "+h.getName());
System.out.println( "Header Value: "+h.getValue());
}
CookieManager cookieManager = CookieManager.getInstance();
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
String result = sb.toString();
return result;
}
finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class PrefetchData extends AsyncTask<String,Void,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// before making http calls
}
@Override
protected String doInBackground(String... params) {
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("WlcClient",
params[0])); // params[0] contains the first value that you have passed and params[1] second value.
postParameters.add(new BasicNameValuePair("ClientType",
params[1]));
postParameters.add(new BasicNameValuePair("Version",
params[2]));
String response = null;
try {
response =
executeHttpPost(server,
postParameters);
res = response.toString();
resp = res.replaceAll("\\s+", "");
System.out.println(res);
//resultt =res;
return res;
} catch (Exception e) {
e.printStackTrace();
errorMsg = e.getMessage();
}
return res;
} // end of doInBackground
protected void onPostExecute(String result) {
super.onPostExecute(result);
// After completing http call
// will close this activity and lauch main activity
Intent i = new Intent(SplashScreen.this, LoginLayout.class);
startActivity(i);
// close this activity
finish();
}
}
}
【问题讨论】:
-
你的意思是onCreate被调用了两次?
-
不确定,我知道 executeHttpPost 被调用了两次,因为我得到了两个不同的 System.out 的标题列表,调用 oncreate 是否也会调用类中的方法?
-
在启动应用程序时,我还看到主 Activity 加载了两次,这表明它也两次执行了该部分的转换
-
在任何执行两次的调用中,打印出堆栈跟踪并查看它是从哪里调用的。
标签: java android http-post splash-screen