Android開發學習筆記-實現連網檢測程式版本

來源:互聯網
上載者:User

標籤: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開發學習筆記-實現連網檢測程式版本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.