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 阅读(1081) | 评论 (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 阅读(1265) | 评论 (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 阅读(246) | 评论 (0)编辑 收藏

Oralce 监听器启动


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

posted @ 2013-05-11 14:47 MikyTan 阅读(175) | 评论 (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 阅读(386) | 评论 (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 阅读(3770) | 评论 (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 阅读(1088) | 评论 (0)编辑 收藏