banxitan

          統計

          留言簿(2)

          閱讀排行榜

          評論排行榜

          2013年5月11日 #

          Android Activity MainThread 中不能執行http通信解決辦法

          今天在做離線文件傳輸時。用HTTP上傳文件。程序一運行 報如下的錯誤
          android.os.NetworkOnMainThreadException

          原因是Google從3開始,強制默認禁止UI主線程發起通信請求 

          解決辦法: 

          把通信的代碼轉移到子線程里去做, 比較靠譜的是new一個AyncTask,在里面做通信

                                    有幾個細節性的問題是,

                                          第一, 一般原有通信的代碼都是共通的API, 被許多個Activity調用, 一個良好的修改方法是在共通API里面new AyncTask

                                         第二, 通信的API一般來說都是同步的, 你通信,然后畫面主線程需要堵塞住,等待API的通信結果,再決定下面的業務邏輯的走向。

          所以,這塊可以采取 AyncTask.get(), 讓主線程堵塞,直到通信結束。 當然,如果你需要將通信異步的話, 可以用Handler機制來解決


          具體調用代碼如下:HTTP異

          步請求

          package com.qqtech.ucstar.utils;

          import java.io.File;
          import java.io.IOException;
          import java.nio.charset.Charset;

          import org.apache.http.HttpResponse;
          import org.apache.http.client.HttpClient;
          import org.apache.http.client.methods.HttpPost;
          import org.apache.http.entity.mime.HttpMultipartMode;
          import org.apache.http.entity.mime.MultipartEntity;
          import org.apache.http.entity.mime.content.FileBody;
          import org.apache.http.impl.client.DefaultHttpClient;

          import android.os.AsyncTask;

          public class HttpReqTask extends AsyncTask<Object, Object, HttpResponse> {

          @Override
          protected HttpResponse doInBackground(Object arg0) {
          String fileUploadUrl
          = (String) arg0[0];
          String streamid
          = (String) arg0[1];
          File file
          = (File) arg0[2];
          //boolean paramBoolean = Boolean.parseBoolean((String) arg0[3]);
          //String paramString3 = (String) arg0[4];
          HttpClient localHttpClient = new DefaultHttpClient();
          //String str1 = "fileName";
          File localFile = file;
          try {
          if ((localFile == null) || (!localFile.exists()))
          throw new IOException("文件不存在:" + localFile);
          }
          catch (IOException e1) {
          e1.printStackTrace();
          }

          HttpPost localPostMethod
          = new HttpPost(fileUploadUrl+"?streamid="+streamid+"&fileencode=UTF-8");
          //MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
          MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null, Charset.forName("UTF-8"));
          try {
          FileBody bin
          = new FileBody(file);
          reqEntity.addPart(
          "file", bin);
          localPostMethod.setEntity(reqEntity);
          HttpResponse response
          = localHttpClient.execute(localPostMethod);
          return response;
          }
          catch (Exception e) {
          e.printStackTrace();
          }

          return null;
          }


          }



          調用代碼如下:


          Object[] param = new Object[5];
               param[0] = answer.getUploadURL();
               param[1] = answer.getStreamid();
               param[2] = new File(answer.getFileURL());
               param[3] = "false";
               param[4] = "";
               AsyncTask res = new HttpReqTask().execute(param);
               HttpResponse rep = null;
               rep = (HttpResponse) res.get();
               if (rep.getStatusLine().getStatusCode() == 200) {
                System.out.println("文件上傳成功");
               }else{
                System.out.println("文件上傳失敗");
               }
              }



          posted @ 2013-07-11 10:51 MikyTan 閱讀(1087) | 評論 (0)編輯 收藏

          修改模擬器DNS方法

          今天在做手機終端開發時,發現連上域名服務器老是連不上,而直接用IP連接是OK的,初步懷凝是DNS問題引起來,經查相關的資料,現記錄如下:

          Android模擬器默認的地址是10.0.2.3,默認的DNS也是10.0.2.3,而一般電腦的IP都是192.168.1.100之類的,不在同一個網段。所以就會出現電腦可以上網但是模擬器不能上網的情況。其實設置方法很簡單,只要把模擬器的默認DNS設置成電腦的DNS地址即可。
          第一步:用系統的命令進入Android開發包的tools目錄
           cd X:\...\android-sdk-windows\tool
          第二布:使用adb的shell,確認系統的各項屬性
          adb shell
          getprop 
          getprop會列出系統當前的各項屬性
          第三步:得到模擬器的DNS地址
          在結果里可以看到:
          [net.dns1]: [10.0.2.3]
          [net.dns2]: [10.0.2.4]
          [net.dns3]: [10.0.2.5]
          [net.dns4]: [10.0.2.6]
          第四步:把dns改成我們自己的DNS
          setprop net.dns1 192.168.1.1

          posted @ 2013-06-04 20:24 MikyTan 閱讀(1274) | 評論 (0)編輯 收藏

          JAVA 連接 ORCLE RAC連接URL串

          連接的URL串

          jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT

          =1521))(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521))(LOAD_BALANCE=yes)(FAILOVER=

          on))(CONNECT_DATA=(SERVICE_NAME=gs)))


          posted @ 2013-05-21 16:48 MikyTan 閱讀(257) | 評論 (0)編輯 收藏

          Oralce 監聽器啟動


          啟動      lsnrctl start
          狀態      lsnrctl status
          關閉      lsnrctl  stop

          posted @ 2013-05-11 14:47 MikyTan 閱讀(182) | 評論 (0)編輯 收藏

          Oracle 導出、導入某用戶所有數據(包括表、視圖、存儲過程...)


          導出命令:exp 用戶名/密碼@數據庫 owner=用戶名 file=文件存儲路徑(如:F:\abcd.dmp)

          測試截圖:exp ZM/sql123@ORCL owner=ZM file=F\abcd.dmp



          導入命令:imp 用戶名/密碼@數據庫 fromuser=用戶名 touser=用戶名 file=d:\cu.dmp ignore=y

           imp:命令類型  

          cu/mycu@db:導入的數據庫登陸(用戶名/密碼@數據庫)  

          fromuser:文件的指定用戶

           touser:指定導入到當前登錄的數據庫某個用戶  

          file:需要導入的數據文件  

          ignore:是否忽略創建錯誤

           

          測試截圖:

          imp ZM/sql123@ORCL fromuser=ZM touser=SZZM file=F:\test.dmp ignore=y





          posted @ 2013-05-11 09:59 MikyTan 閱讀(393) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 交口县| 长兴县| 阳谷县| 分宜县| 山东省| 南投县| 波密县| 兴安盟| 禄丰县| 开原市| 隆昌县| 得荣县| 延安市| 房山区| 伽师县| 泊头市| 怀宁县| 民权县| 漳平市| 长沙县| 于都县| 龙井市| 桦南县| 正定县| 营山县| 苏尼特左旗| 荆门市| 睢宁县| 毕节市| 裕民县| 辰溪县| 正镶白旗| 黎平县| 许昌市| 洛隆县| 洛浦县| 萍乡市| 沂水县| 刚察县| 工布江达县| 铁岭县|