banxitan

          統計

          留言簿(2)

          閱讀排行榜

          評論排行榜

          2013年3月26日 #

          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 閱讀(183) | 評論 (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)編輯 收藏

          linux環境下的rmi常見問題

          linux環境下的rmi常見問題

          問題一:RMI服務提供程序運行在Windows操作系統下,RMI服務可以正常訪問,但將RMI服務提供程序部署到Linux操作系統下后,RMI服務無法訪問,提示

          org.springframework.remoting.RemoteConnectFailureException:

          Cannot connect to remote service [rmi://192.168.0.106:1199/ItemRetag]; nested exception is java.rmi.ConnectException: Connection refused to host: 127.0.0.1; ……   
           解決辦法:在加載RMI服務之前將當前服務器的IP指定給hostName,如 System.setProperty("java.rmi.server.hostname", "192.168.100.7");或者修改/etc/hosts文件,在這個文件中加 192.168.100.54  testlinux1 localhost.localdomain localhost 就行,或者將/etc/hosts文件中默認的127.0.0.1改成當前機器的IP即可!

          問題二:java.rmi.server.ExportException: internal error: ObjID already in use Caused by: java.rmi.server.ExportException: internal error: ObjID already in use……

          出現這種問題及有可能是/etc/hosts文件中指定的IP并不是當前服務器的真實IP,RMI在初始化時注冊服務失敗。

          通過System.out.println(InetAddress.getLocalHost().toString());查看當前主機的IP是否為真實IP,如顯示為SIMBANK/220.250.64.24,而真實IP為192.168.1.2         

          解決辦法:修改/etc/hosts文件中錯誤的IP即可,將:

          220.250.64.24          SIMBANK
          修改為

          192.168.1.2          SIMBANK

          posted @ 2013-05-08 20:26 MikyTan 閱讀(3785) | 評論 (0)編輯 收藏

          IBM JDK 、SUN JDK、HP JDK如何產生Heapdump文件

          JAVA中,通過分析Heapdump文件可以檢查程序是否存在內存泄露,但是這個文件一般是在程序遇到致命問題時才會產生,而如何事前生成這個文件,從而在程序尚末崩潰前找出問題的所在。

          以下記述了各個版本的JDK產生DUMP文件的方法:

          UN JDK生成Heapdump文件只需要在tomcat啟動腳本中增加 HeapDumpOnOutOfMemoryError 參數
          此參數需要Java SE release 5.0 update 14 或以上支持

          設置示例:
          set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx800m -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpOnCtrlBreak

          IBM JDK生成Heapdump文件的開關:
          — export IBM_HEAPDUMP=true
          — export IBM_HEAP_DUMP=true
          — export IBM_HEAPDUMP_OUTOFMEMORY=true
          — export IBM_JAVADUMP_OUTOFMEMORY=true
          — export IBM_JAVACORE_OUTOFMEMORY=true
          — export IBM_HEAPDUMPDIR=<directory_path>

          HP JDK生成Heapdump文件需要在在環境變量上,加上export _JAVA_HEAPDUMP=1

          posted @ 2013-03-26 16:03 MikyTan 閱讀(1106) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 宁化县| 永清县| 周至县| 青浦区| 方山县| 民乐县| 桂东县| 登封市| 黔西县| 乳山市| 咸丰县| 吴旗县| 游戏| 永济市| 惠来县| 景谷| 山丹县| 天等县| 新丰县| 鹰潭市| 乌兰察布市| 财经| 营山县| 宝应县| 九龙城区| 建始县| 农安县| 云南省| 平邑县| 延安市| 惠安县| 息烽县| 安新县| 建阳市| 江津市| 陇川县| 酒泉市| 志丹县| 西和县| 清水县| 武山县|