求救啊安卓 html input fileconnection调用getInputStream()就出错,connection不是空的

当前访客身份:游客 [
当前位置:
我是想在网络环境中下载读取一个文件,但不知道为什么报错,我具体是这样做的:
HttpDownloader httpDownloader = new HttpDownloader();&// 后面有贴出该类使用到的方法 &&&
String contents = httpDownloader.downloadBaseFile(&&); &&&
System.out.println(contents);
其中这个是我的ip地址:192.168.1.104 ,我在tomcat中部署了CFM_xfire项目,然后项目下面有I_Remember.lrc文件,想通过程序把文件中的内容读取出来!
上面代码的&httpDownloader.downloadBaseFile方法如下:
public String downloadBaseFile(String urlStr){ &&StringBuffer sb = new StringBuffer(); &&String line = &&BufferedReader reader = &&try{ &&&//创建一个url对象 &&&url = new URL(urlStr); &&&//通過url对象,创建一个HttpURLConnection对象(连接) &&&HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); &&&//通过HttpURLConnection对象,得到InputStream &&&reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); &&&//使用io流读取文件 &&&while ((line = reader.readLine()) != null){ &&&&sb.append(line); &&&} &&}catch(Exception e){ &&&e.printStackTrace(); &&}finally{ &&&try{ &&&&if (reader != null){ &&&&&reader.close(); &&&&} &&&} catch (Exception e){ &&&&e.printStackTrace(); &&&} &&} &&return sb.toString(); &}
但是提示是在 urlConnection.getInputStream()的时候报错,信息如下:
在本地我访问地址:&的时候是可以看到浏览器上显示信息的,大家看有没有遇到过这个问题!有的话还望赐教!
03-09 10:34:01.500: D/gralloc_goldfish(956): Emulator without GPU emulation detected.
03-09 10:35:53.625: W/System.err(956): android.os.NetworkOnMainThreadException
03-09 10:35:53.652: W/System.err(956): &at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
03-09 10:35:53.661: W/System.err(956): &at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:74) 03-09 10:35:53.670: W/System.err(956): &at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
03-09 10:35:53.670: W/System.err(956): &at libcore.io.IoBridge.connect(IoBridge.java:112)
03-09 10:35:53.670: W/System.err(956): &at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-09 10:35:53.670: W/System.err(956): &at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
03-09 10:35:53.690: W/System.err(956): &at java.net.Socket.connect(Socket.java:842)
03-09 10:35:53.690: W/System.err(956): &at libcore.net.http.HttpConnection.&init&(HttpConnection.java:77)
03-09 10:35:53.710: W/System.err(956): &at libcore.net.http.HttpConnection.&init&(HttpConnection.java:50)
03-09 10:35:53.810: W/System.err(956): &at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
03-09 10:35:53.820: W/System.err(956): &at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
03-09 10:35:53.820: W/System.err(956): &at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
03-09 10:35:53.820: W/System.err(956): &at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
03-09 10:35:53.820: W/System.err(956): &at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
03-09 10:35:53.845: W/System.err(956): &at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
03-09 10:35:53.852: W/System.err(956): &at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
03-09 10:35:53.852: W/System.err(956): &at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
03-09 10:35:53.860: W/System.err(956): &at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
03-09 10:35:53.870: W/System.err(956): &at com.senly.utils.HttpDownloader.downloadBaseFile(HttpDownloader.java:37)
03-09 10:35:53.910: W/System.err(956): &at com.senly.download.DownloadActivity$DownloadLRCListener.onClick(DownloadActivity.java:40)
03-09 10:35:53.910: W/System.err(956): &at android.view.View.performClick(View.java:3480)
03-09 10:35:53.921: W/System.err(956): &at android.view.View$PerformClick.run(View.java:13983)
03-09 10:35:53.921: W/System.err(956): &at android.os.Handler.handleCallback(Handler.java:605)
03-09 10:35:53.930: W/System.err(956): &at android.os.Handler.dispatchMessage(Handler.java:92)
03-09 10:35:53.930: W/System.err(956): &at android.os.Looper.loop(Looper.java:137)
03-09 10:35:53.950: W/System.err(956): &at android.app.ActivityThread.main(ActivityThread.java:4340)
03-09 10:35:53.950: W/System.err(956): &at java.lang.reflect.Method.invokeNative(Native Method) 03-09 10:35:53.960: W/System.err(956): &at java.lang.reflect.Method.invoke(Method.java:511) 03-09 10:35:53.960: W/System.err(956): &at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-09 10:35:53.980: W/System.err(956): &at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-09 10:35:53.980: W/System.err(956): &at dalvik.system.NativeStart.main(Native Method)
共有2个答案
<span class="a_vote_num" id="a_vote_num_
试下先调用outputstream
--- 共有 2 条评论 ---
: /guodongli/archive//2005930.html
(3年前)&nbsp&
outputstream ?
我不需要写入什么外部存储或者其他的,用不到outputstream啊,你的意思是?
(3年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
最后在51CTO技术论坛被版主帮忙解决了,不得不说那边神速啊!
要是同样遇到这个问题的朋友,可以去看看原因:
更多开发者职位上
有什么技术问题吗?
潘深练GS的其他问题URLConnection的getInputStream()出错
[问题点数:50分,无满意结帖,结帖人SEESEECN]
URLConnection的getInputStream()出错
[问题点数:50分,无满意结帖,结帖人SEESEECN]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。Android·HTTP超时机制 - 其实挺聪明就是反应有点慢 - ITeye技术网站
博客分类:
由于手机端应用的响应,与当时的无线通信网络状况有很大的关联。而通信网络往往具有不稳定,延迟长的特点。所以,在我们的应用程序中,当我们请求网络的时候,超时机制的应用就显得特别重要。
超时机制主要有:
1、HTTP请求超时机制
2、Socket通信超时机制
HTTP请求超时机制
public static void main(String[] args){
long a=System.currentTimeMillis();
URL myurl = new URL(“”);
URLConnection myurlcon = myurl.openConnection();
myurlcon.setConnectTimeout(1000);
myurlcon.setReadTimeout(1000);
BufferedReader in = new BufferedReader(new InputStreamReader(myurlcon.getInputStream(),”UTF-8″));
String inputL
while ((inputLine = in.readLine()) != null){
System.out.println(inputLine);
in.close();
System.out.println(System.currentTimeMillis()-a);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
如果超时 将 抛出 以下 异常
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:606)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:554)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:940)
at com.Test.main(Test.java:52)
补充内容:
在android项目中,如果有用到http请求,就必须也应该加上http请求的超时管理,异常管理,项目中遇到这个需求,google上搜索到了一大堆,但是写的都比较简单,做个demo还行,用在项目中还是不够完善。自己写了一个例子,有不完善之处,欢迎大家指正。
  需要注意的地方:有三个方面
  如何控制超时机制
  如何处理异常
  如何处理请求错误的
private class XmlAsyncLoader extends XmlResourceRequest {
private boolean mIsCancle =
private HttpGet mG
private HttpClient mH
public XmlAsyncLoader(MxActivity&?& activity, String url)
throws MalformedURLException {
super(activity, url);
protected void doTaskInBackground() {
// 请求数据
if (mUrl.toLowerCase().startsWith("http://")) {
mGet = initHttpGet(mUrl);
mHttp = initHttp();
HttpResponse response = mHttp.execute(mGet);
if (mIsCancle) {
if (response != null) {
if(response.getStatusLine().getStatusCode()!=HttpStatus.SC_OK){
onResponseError("network error");
Log.v(TAG, "the code is :"+response.getStatusLine().getStatusCode());
notifyUpdateProgress(70);
Document doc = getDocumet(response);
Element root = doc.getDocumentElement();
NodeList appList = root
.getElementsByTagName(Item_ELEMENT_NAME);
final int len = appList.getLength();
if (len &= 0) {// 没有items
onFoundNoItems();
for (int i = 0; i & i++) {
Element item = (Element) appList.item(i);
if (item.getNodeType() == Node.ELEMENT_NODE) {
HahaItemInfo info = createHahaItemIno(item);
if (mIsCancle){
onFoundItem(info, 80 + 20 * (i + 1) / len);
addUrlToQueue(info.userIconUrl);
}catch(ConnectTimeoutException e){
onResponseError("time out");
} catch (ClientProtocolException e) {
--mCurrentP
e.printStackTrace();
} catch (IOException e) {
--mCurrentP
e.printStackTrace();
} catch (XmlPullParserException e) {
--mCurrentP
e.printStackTrace();
notifyLoadFinish();
notifyLoadImages();
mHttp.getConnectionManager().shutdown();
private HttpClient initHttp() {
HttpClient client = new DefaultHttpClient();
client.getParams().setIntParameter(
HttpConnectionParams.SO_TIMEOUT, TIME_OUT_DELAY); // 超时设置
client.getParams().setIntParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, TIME_OUT_DELAY);// 连接超时
private HttpGet initHttpGet(String mUrl) {
HttpGet get = new HttpGet(mUrl);
initHeader(get);
public boolean tryCancel() {
Log.i(TAG, "tryCanle is working");
mGet.abort();
mIsCancle =
mHttp.getConnectionManager().shutdown();
notifyLoadFinish();
这是一个异步任务类,发送get请求请求数据,解析服务器的响应数据,同时通知ui线程更新ui
在android中,互联网交互的写法有很多,可以使用apache提供的包,也可以使用google提供的api,我不知道那种更好,只是习惯于使用
apache的api。
1. 设置超时机制
client.getParams().setIntParameter( HttpConnectionParams.SO_TIMEOUT, TIME_OUT_DELAY); // 超时设置 client.getParams().setIntParameter( HttpConnectionParams.CONNECTION_TIMEOUT, TIME_OUT_DELAY);// 连接超时
这里设置了两种超时,第一种是请求超时,第二种时连接超时。
当向服务器发出请求后,请求和服务器建立socket连接,但是很长时间内都没有建立socket连接,这就时第一种请求超时,这种情况主要发生在请求了
一个不存在的服务器。超时之后,会抛出InterruptedIOException异常。
Timeout for blocking operations. The argument value is specified in milliseconds. An InterruptedIOException is thrown if this timeout expires.
客户端已经与服务器建立了socket连接,但是服务器并没有处理客户端的请求,没有相应服务器,这就是第二种连接超时。这中超时会抛出
ConnectTimeoutException异常,ConnectTimeoutException继承自InterruptedIOException,所以只要捕获ConnectTimeoutException 就可以了。
2. 分析一下请求的过程
 2.1 HttpResponse response = mHttp.execute(mGet);
执行请求方法,获取服务器响应,(这里有个不太成熟的看法,response不可能为null,还有待验证)。
2.2 获取请求响应码
if(response.getStatusLine().getStatusCode()!=HttpStatus.SC_OK){ onResponseError("network error"); Log.v(TAG, "the code is :"+response.getStatusLine().getStatusCode()); }
  即使连接上服务器,并且从服务器上获取了数据,也有可能时服务器返回的错误信息,因此也需要特殊处理。
2.3 异常处理
  对于异常,不能简单的捕获就完事,例如上面的代码中,我请求第三页的数据,如果发生异常,请求不成功,那么我就需要让当前页数回滚,
如果成功了就不用回滚了,所以需要对异常进行处理
2.4 finally关键字
  不管是请求成功,还是失败,都需要关闭链接。
浏览 12690
浏览: 288644 次
来自: 上海
[url][url][url][url][url][/url] ...
递归删除指定目录下的.git文件find . -name .g ...
受教了,好像Socket通信超时机制 还没有说吧
此文写的很好!不知道博主有没有遇到这样的问题?delegate ...当前访客身份:游客 [
热爱JAVA WEB编程,能熟练使用JAVA EE13门技术中涉及JAVA WEB的大概6门技术,熟悉lucene,solr,es等搜索相关,了解JBPM
:我测试完了,感谢楼主,适合入门级教程
:引用来自“tianpeng91”的评论 引用来自“yangf...
:引用来自“zkf17983”的评论 以下两个类不存在 ...
:以下两个类不存在 SenderDemo1 sender = new Sen...
:引用来自“dongfangke”的评论 你确定你的例子能...
:你确定你的例子能跑得起来么?
:引用来自“yangf2008”的评论 确实是Tomcat 实现...
:确实是Tomcat 实现问题,Tomcat 7.0.28 修复了这...
:引用来自“浮生如斯”的评论 看HTML5的WebSocket...
:看HTML5的WebSocket的时候在Tomcat7.0.27上写Web...
今日访问:0
昨日访问:16
本周访问:16
本月访问:154
所有访问:13138
URLConnection中的getContent与getInputStream
发表于2年前( 16:11)&&
阅读(3168)&|&评论()
0人收藏此文章,
& & 最近一直在做数据抓取的工作,以前接触的比较少,偶尔尝试过,但那会儿不太熟。后来看到大学都使用HttpClient来做,我就去下载了然后做了个测试,发现确实很简单,好用。于是我就一直用它来做数据抓取和文件下载的工作,这样用了一段时间,可是在用的过程中经常出现一些莫名奇怪的错误,我想应该是我对它的一些设置或者用法不对。但蛋疼的是它报的错误都是基本的IO错误,根据就不知道为什么。这样继续了快一个月,抓取断断续续的,我实在受不了,就果断换成了JDK自带的HttpURLConnection,这样就再也没出现那样的错误,最多是ReadTimeout,这样我就可以控制了。
& & 可是呢,我边用边看API,发现一些很有趣的事,在获得返回内容的时候,URLConnection中竟然有两个方法,一个是Object getContent(),一个InputStream getInputStream()方法。当我直接输出返回值时,都为一个inputStream,当然,因为是JDK中最基本的,而且用的是socket,返回这个没什么。可返回都一样,为什么要有两个方法呢?想了好久没明白,后来再看API,发现其中有这样一个方法setContentHandlerFactory(ContentHandlerFactory fac),然后慢慢的看API后发现ContentHandlerFactory只是一个接口,而它只有一个方法ContentHandler &createContentHandler(String mimetype)。再跟ContentHandler ,发现它有两个方法Object getContent(URLConnection urlc)、Object getContent(URLConnection urlc,Class[] classes)。这样,终于明天了,getContent()实际上底层调用了这两个方法。应该来说,类似于监听器。
& & 那么,当我在请求HTML的时候,我只要实现自己的接口,然后再调用&setContentHandlerFactory方法,我就可以把返回和文本转换成String,不用每次都进行转换了。例如,我定义了一个实现类:
import java.io.BufferedR
import java.io.IOE
import java.io.InputStreamR
import java.net.ContentH
import java.net.ContentHandlerF
import java.net.URLC
public class ContentHandlerFactoryImpl implements ContentHandlerFactory {
private static final String DEFAULT_ENCODING = "UTF-8";
public ContentHandler createContentHandler(String mimetype) {
if (mimetype == null) {
return new ContentHandlerImpl(false);
if (StringConfig.isStringType(mimetype)) {
return new ContentHandlerImpl(true);
return new ContentHandlerImpl(false);
class ContentHandlerImpl extends ContentHandler {
private boolean transform =
public ContentHandlerImpl(boolean transform) {
this.transform =
public Object getContent(URLConnection connection) throws IOException {
if (!transform) {
return connection.getInputStream();
String encoding = getEncoding(connection.getHeaderField("Content-Type"));
if (encoding == null) {
encoding = DEFAULT_ENCODING;
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));
String temp =
StringBuilder content = new StringBuilder();
while ((temp = reader.readLine()) != null) {
content.append(temp);
return content.toString();
private String getEncoding(String contentType) {
String[] headers = contentType.split(";");
for (String header : headers) {
String[] params = header.split("=");
if (params.length == 2) {
if (params[0].equals("charset")) {
return params[1];
} 这里有一个配置文件,是自己定义的,不全,只是拿来测试的。
&?xml version="1.0" encoding="UTF-8"?&
&mime-type&text/plain&/mime-type&
&mime-type&text/html&/mime-type&
&mime-type&text/css&/mime-type&
&mime-type&text/csv&/mime-type&
&mime-type&application/javascript&/mime-type&
&mime-type&application/json&/mime-type&
&mime-type&application/xml&/mime-type&
&/types& 这样的话,当返回的为HTML或其它非流的文件时,不再需要每次去写转换了。
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读  在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持。
  在HTTP通信中使用最多的就是GET和POST了,GET请求可以获取静态页面,也可以把参数放在URL字符串的后面,传递给服务器。POST与GET的不同之处在于POST的参数不是放在URL字符串里面,而是放在HTTP请求数据中。
  本文将使用标准Java接口HttpURLConnection,以一个实例演示如何使用POST方式向服务器提交数据,并将服务器的响应结果显示在Android客户端。
1.服务器端的准备
  为了完成该实例,我们需要在服务器端做以下准备工作:
  (1)我们需要在MyEclipse中创建一个Web工程,用来模拟服务器端的Web服务,这里,我将该工程命名为了&myhttp&。
  (2)修改该工程的&index.jsp&文件,添加两个输入框和一个提交按钮,作为该Web工程的显示页面。运行Tomcat,在浏览器中访问该Web工程,可以看到如图1所示的界面。
图1&Web工程的显示页面
  (3)在该Web工程中,创建一个继承自HttpServlet的LoginAction类,并实现其中的doPost()方法,用来响应图1所示页面的用户操作。具体实现如下:
1   public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/charset=utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
//判断用户名密码是否正确
if(username.equals("admin") && password.equals("123")) {
out.print("Login succeeded!");
out.print("Login failed!");
out.flush();
out.close();
  由上述代码可以看出,当我们在图1所示的页面输入用户名&admin&,密码&123&时,点击提交按钮,会得到&Login&succeeded!&的提示信息,如图2所示。若用户名、密码错误,则会得到&Login&failed!&的提示信息。
图2&登录成功界面
  至此,服务器端的准备工作就全部完成了。
2.客户端实现
  在Android客户端,我们需要完成的工作是:以POST方式发送用户名密码到上述服务器,并获得服务器的验证信息。
  我们分以下几个步骤来完成。
2.1&UI界面
  在Android工程中,我们需要完成一个简单的UI界面,用来完成用户名密码的输入、发送POST请求、显示服务器的验证结果,完成后的界面如图3所示。
图3&客户端UI界面
  在MainActivity中,我们需要获取两个EditText控件的输入,&提交&按键的监听,以及服务器验证结果的TextView内容显示。具体实现代码如下:
* Function
点击事件响应
博客园-依旧淡然
public void onClick(View view) {
switch(view.getId()) {
case R.id.button_submit:
String username = mEditText_userName.getText().toString();
String password = mEditText_password.getText().toString();
Map&String, String& params = new HashMap&String, String&();
params.put("username", username);
params.put("password", password);
mTextView_result.setText(HttpUtils.submitPostData(params, "utf-8"));
2.2发送POST请求到服务器
  可以看到上述代码中,我们调用了HttpUtils类的静态方法submitPostData()完成了发送POST请求到服务器,并将该方法的返回值(服务器的响应结果)显示在了TextView控件中。
  在HttpUtils类中,submitPostData()方法的具体实现如下:
* Function
发送Post请求到服务器
params请求体内容,encode编码格式
博客园-依旧淡然
public static String submitPostData(Map&String, String& params, String encode) {
byte[] data = getRequestData(params, encode).toString().getBytes();    //获得请求体
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setConnectTimeout(3000);
  //设置连接超时时间
httpURLConnection.setDoInput(true);
//打开输入流,以便从服务器获取数据
httpURLConnection.setDoOutput(true);
//打开输出流,以便向服务器提交数据
httpURLConnection.setRequestMethod("POST");
    //设置以Post方式提交数据
httpURLConnection.setUseCaches(false);
//使用Post方式不能使用缓存
//设置请求体的类型是文本类型
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//设置请求体的长度
httpURLConnection.setRequestProperty("Content-Length", String.valueOf(data.length));
//获得输出流,向服务器写入数据
OutputStream outputStream = httpURLConnection.getOutputStream();
outputStream.write(data);
int response = httpURLConnection.getResponseCode();
//获得服务器的响应码
if(response == HttpURLConnection.HTTP_OK) {
InputStream inptStream = httpURLConnection.getInputStream();
return dealResponseResult(inptStream);
//处理服务器的响应结果
} catch (IOException e) {
e.printStackTrace();
return "";
  通过以上的代码可以看出,在该方法中,其实完成了3件事:
  (1)将用户名密码封装成请求体,这是通过调用getRequestData()方法来实现的(后面会讲到这个方法的具体实现)。
  (2)设置HttpURLConnection对象的各种参数(其实是设置HTTP协议请求体的各项参数),然后通过httpURLConnection.getOutputStream()方法获得服务器输出流outputStream,再使用outputStream.write()方法将请求体内容发送给服务器。
  (3)判断服务器的响应码,通过httpURLConnection.getInputStream()方法获得服务器的响应输入流,然后再调用dealResponseResult()方法处理服务器的响应结果。
2.3封装请求体
  使用POST请求时,POST的参数不是放在URL字符串里,而是放在HTTP请求数据中,所以我们需要对POST的参数进行封装。
  针对该实例而言,我们发送的URL请求是:http://192.168.1.101:8080/myhttp/servlet/LoginAction,但是我们需要将POST的参数(也就是username和password)封装到该请求中,形成如下的形式:http://192.168.1.101:8080/myhttp/servlet/LoginAction?username=admin&password=123。我们该怎么做呢?如下的代码给出了一种实现的方案:
* Function
封装请求体信息
params请求体内容,encode编码格式
博客园-依旧淡然
public static StringBuffer getRequestData(Map&String, String& params, String encode) {
StringBuffer stringBuffer = new StringBuffer();
//存储封装好的请求体信息
for(Map.Entry&String, String& entry : params.entrySet()) {
stringBuffer.append(entry.getKey())
.append("=")
.append(URLEncoder.encode(entry.getValue(), encode))
.append("&");
stringBuffer.deleteCharAt(stringBuffer.length() - 1);
//删除最后的一个"&"
} catch (Exception e) {
e.printStackTrace();
return stringB
2.4处理响应结果
  最后,我们再来看一看对服务器返回结果的处理是怎样的。因为在本实例中,服务器的返回结果是字符串&Login&succeeded!&或&Login&failed!&,所以这里我们需要做的就是将服务器的返回结果输入流转化成字符串。当然了,如果服务器返回的是图片,那么,我们就需要就得到的输入流转化成Bitmap图片了。如下代码是上面代码中用到的dealResponseResult()方法的具体实现。
* Function
处理服务器的响应结果(将输入流转化成字符串)
inputStream服务器的响应输入流
博客园-依旧淡然
public static String dealResponseResult(InputStream inputStream) {
String resultData = null;
//存储处理结果
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
while((len = inputStream.read(data)) != -1) {
byteArrayOutputStream.write(data, 0, len);
} catch (IOException e) {
e.printStackTrace();
resultData = new String(byteArrayOutputStream.toByteArray());
return resultD
2.5运行效果
  最后,看看该实例的运行效果吧,如图4所示。
图4&实例运行效果
阅读(...) 评论()

我要回帖

更多关于 安卓 input file 多选 的文章

 

随机推荐