標籤:android style blog http color io os 使用 ar
package com.frank.mobilesafe;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URI;import java.net.URL;import javax.net.ssl.HttpsURLConnection;import org.apache.http.HttpClientConnection;import org.apache.http.client.methods.HttpUriRequest;import org.json.JSONObject;import com.frank.mobilesafe.utils.FileHelper;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.PackageManager.NameNotFoundException;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.Window;import android.widget.TextView;import android.widget.Toast;public class SplashActivity extends Activity { private static final int SHOW_UPDATE_DIALOG = 0; protected static final int REQUEST_FAILURE = 1; protected static final int REQUEST_ERROR = 2; private static final int SHOW_HOME = 3; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { HandlerStartMessage(msg.what); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // requestWindowFeature(Window.FEATURE_NO_TITLE);設定無標題 setContentView(R.layout.activity_splash); TextView tv_version = (TextView) findViewById(R.id.tv_version); tv_version.setText(getVersion()); CheckUpdate(); } protected void HandlerStartMessage(int what) { switch (what) { case SHOW_UPDATE_DIALOG: Toast.makeText(this, "該升級了", 0).show(); break; case SHOW_HOME: //Toast.makeText(this, "show home activity", 0).show(); ShowMainActivity(); break; case REQUEST_FAILURE: Toast.makeText(this, "REQUEST_FAILURE", 0).show(); break; default: break; } }/** * 顯示主介面 */ private void ShowMainActivity() { // TODO Auto-generated method stub Intent intent = new Intent(this,MainActivity.class); startActivity(intent); finish(); } /** * 檢查升級 */ protected void CheckUpdate() { new Thread() { public void run() { long startTime = System.currentTimeMillis(); Message msg = Message.obtain(); try { URL url = new URL("http://192.168.1.104/1.html");// 網路連結地址 HttpURLConnection conn = (HttpURLConnection) url .openConnection();// 建立連線物件 conn.setRequestMethod("GET");// 佈建要求方式 conn.setReadTimeout(5000);// 佈建要求逾時時間 if (200 == conn.getResponseCode())// 當請成功的時候執行 { InputStream inputStream = conn.getInputStream(); FileHelper helper = new FileHelper(); String content = helper.StreamToString(inputStream); Log.i("a", content); JSONObject obj = new JSONObject(content); String version = (String) obj.get("version"); Log.i("version", version); if (version == getVersion()) { msg.what = SHOW_UPDATE_DIALOG; } else { msg.what = SHOW_HOME; } } else { Log.i("a", "請求失敗!"); msg.what = REQUEST_FAILURE; } } catch (Exception e) { Log.i("a", "shibai"); msg.what = REQUEST_ERROR; e.printStackTrace(); } finally { long endTime = System.currentTimeMillis(); long spanTime = endTime-startTime; if (spanTime<2000) { try { Thread.sleep(2000-spanTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } handler.sendMessage(msg); } }; }.start(); } /** * 擷取版本資訊 * * @return */ protected String getVersion() { String versionStr = ""; PackageManager packManger = getPackageManager(); try { PackageInfo info = packManger.getPackageInfo(getPackageName(), 0); versionStr = info.versionName;// 擷取的版本資訊 } catch (NameNotFoundException e) { // TODO Auto-generated catch block versionStr = ""; e.printStackTrace(); } return versionStr; }}問題總結:
1、在解析JSON的時候需要情況一直遇到異常,出錯異常資訊為org.json.JSONException: Value ? of type java.lang.String cannot be converted to JSONObject,經查得是在儲存json文本的時候是使用的記事本造成的,這也就是說在儲存JSON的使用應該使用editplus等文字編輯器進行儲存,儲存的格式應該為utf8 無bom格式,這樣在進行解析的時候就不會造成異常。
2、在連網擷取資料的時候,因為是在本機iis上配置的網站,不過在請求資料的時候一直請求不到,遇到的第一個原因就是沒有對請求佈建要求方式以及請求時間,之後對百度等其他網站進行請求都沒問題,卻對自己配置的請求不了,經過抓耳撓腮之後,查的原因竟是http後面的反斜線少了一個。大意了!
3、線上程內訪問線程外的資源的時候,需要使用java事件機制進行處理。主要方法如下:
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { HandlerStartMessage(msg.what); } };
protected void CheckUpdate() { new Thread() { public void run() { long startTime = System.currentTimeMillis(); Message msg = Message.obtain(); msg.what = SHOW_UPDATE_DIALOG; handler.sendMessage(msg); } }; }.start();
Android開發學習筆記-實現連網檢測程式版本