http网络通信--页面源代码查看
2013-10-30 16:17
465 查看
1.要在andorid中实现网络图片查看,涉及到用户隐私问题,所以要在AndroidManifest.xml中添加访问网络权限
2.布局文件
3.MainActivity.java
4.StreamService.java
![](http://img.blog.csdn.net/20131030161609765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhpeGluaHVhY29t/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
以上毫无疑问地成功,细心地我们发现,如果把index.jsp的编码改为gbk,gb2312等等的字符编码,上面的代码会显示成功的界面吗?
经过验证,把index.jsp的编码改为gbk,gb2312。结果是:
![](http://img.blog.csdn.net/20131030165923765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhpeGluaHVhY29t/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20131030165938000?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhpeGluaHVhY29t/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Android界面中出现了乱码。
原因在于:
public class StreamService {
public static String getInputStream(InputStream iSteam) throws IOException{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len=0;
if((len=iSteam.read(buffer))!=-1){ //把InputStream读入到内存当做
baos.write(buffer, 0, len); //写入内存
}
iSteam.close();
baos.close();
byte[] result=baos.toByteArray();
String html = new String(result, "utf-8");
return html;
}
我们得到字节result后,转化为字符串的字符是utf-8。
String temp = new String(result);在这方法中android系统默认的字符为utf-8
![](http://img.blog.csdn.net/20131030170025312?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhpeGluaHVhY29t/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如何index.jsp中的编码是gbk,gb2312,并且返回的字符串也没有设定编码。这样就会与android默认返回的编码utf-8冲突,所以出现乱码
解决字符串编码问题
修改StreamService.java
修改后结果:
<uses-permission android:name="android.permission.INTERNET"/>
2.布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <EditText android:id="@+id/path" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="http://10.162.0.171:8080/html/index.jsp" /> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="查看" android:onClick="onClick" /> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </ScrollView> </LinearLayout>
3.MainActivity.java
package com.example.html; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.apache.http.HttpConnection; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private EditText path; private TextView text; private final int SUCCESS=1; private final int ERROR=2; /** * 主线程创建消息处理器 */ private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { if(msg.what==SUCCESS){ String showhtml =(String) msg.obj; text.setText(showhtml); }else if(msg.what==ERROR){ Toast.makeText(MainActivity.this, "html加载失败", Toast.LENGTH_LONG).show(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); path = (EditText) findViewById(R.id.path); text = (TextView) findViewById(R.id.text); } public void onClick(View view) { final String textPath = path.getText().toString(); if(!TextUtils.isEmpty(textPath)){ new Thread(){ @Override public void run() { try { URL url = new URL(textPath); int code = conn.getResponseCode(); if(code==200){ InputStream is = conn.getInputStream(); String s=StreamService.getInputStream(is); Message msg = new Message(); msg.what=SUCCESS; msg.obj=s; handler.sendMessage(msg); }else{ System.out.println("code"+code); InputStream is = conn.getInputStream(); String s=StreamService.getInputStream(is); System.out.print(s); Message msg = new Message(); msg.what=ERROR; handler.sendMessage(msg); } } catch (Exception e) { // TODO Auto-generated catch block System.out.println("textPath"+textPath); e.printStackTrace(); Message msg = new Message(); msg.what=ERROR; handler.sendMessage(msg); } } }.start(); }else{ Toast.makeText(MainActivity.this, "访问路径不能为空", Toast.LENGTH_LONG).show(); } } }
4.StreamService.java
package com.example.html; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; public class StreamService { public static String getInputStream(InputStream iSteam) throws IOException{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len=0; if((len=iSteam.read(buffer))!=-1){ //把InputStream读入到内存当做 baos.write(buffer, 0, len); //写入内存 } iSteam.close(); baos.close(); byte[] result=baos.toByteArray(); String html = new String(result, "utf-8"); return html; } }
以上毫无疑问地成功,细心地我们发现,如果把index.jsp的编码改为gbk,gb2312等等的字符编码,上面的代码会显示成功的界面吗?
经过验证,把index.jsp的编码改为gbk,gb2312。结果是:
Android界面中出现了乱码。
原因在于:
public class StreamService {
public static String getInputStream(InputStream iSteam) throws IOException{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len=0;
if((len=iSteam.read(buffer))!=-1){ //把InputStream读入到内存当做
baos.write(buffer, 0, len); //写入内存
}
iSteam.close();
baos.close();
byte[] result=baos.toByteArray();
String html = new String(result, "utf-8");
return html;
}
我们得到字节result后,转化为字符串的字符是utf-8。
String temp = new String(result);在这方法中android系统默认的字符为utf-8
如何index.jsp中的编码是gbk,gb2312,并且返回的字符串也没有设定编码。这样就会与android默认返回的编码utf-8冲突,所以出现乱码
解决字符串编码问题
修改StreamService.java
package com.example.html; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; public class StreamService { public static String getInputStream(InputStream iSteam) throws IOException{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len=0; if((len=iSteam.read(buffer))!=-1){ //把InputStream读入到内存当做 baos.write(buffer, 0, len); //写入内存 } iSteam.close(); baos.close(); byte[] result=baos.toByteArray(); //解决中文乱码 //解析result里面的字符串 String temp = new String(result); if(temp.contains("utf-8")){ //编码为utf-8时,直接返回字符串 return temp; }else if(temp.contains("gbk")){ //如果不是utf-8,则设置返回的编码 String html = new String(result, "gbk"); return html; }else if(temp.contains("gb3212")){ String html = new String(result, "gb3212"); return html; } return temp; } }
修改后结果:
相关文章推荐
- http网络通信--页面源代码查看
- Http网络通信--网络图片查看
- 在android中显示网络图片及查看页面源代码
- Http网络通信--网络图片查看
- 在android中显示网络图片及查看页面源代码
- 网络通信 --> Socket、TCP/IP、HTTP、FTP及网络编程
- iOS学习笔记(八)——iOS网络通信http之NSURLConnection
- IOS网络通信之ASIHttpRequest的使用(二)
- Ceph 网络通信源代码分析
- Http进行网络通信
- 直接用EditPlus作为Firefox“查看页面源代码”工具后的BUG
- iOS学习笔记(八)——iOS网络通信http之NSURLConnection
- HTTP网络通信小结
- iOS网络通信类库用AFNetworking替换ASHttpRequest的解决方案
- Android网络编程之Http通信
- Android 网络通讯之HTTP请求通信
- Android笔记之 网络http通信
- android网络通信之HTTP协议教程实例汇总
- android网络通信之HttpUrlConnection
- HTTP网络通信框架——Volley