当前位置: 编程技术>移动开发
本页文章导读:
▪viewholder的施用 viewholder的使用
Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。优化的思路两种:1. View的重用 View的每次创.........
▪ 定时发送GPS信息开机起步 定时发送GPS信息开机启动
主页面package com.dongqin.cn;import com.dongqin.cn.service.LocationService;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.StrictMode;import android.widget.T.........
▪ 关于socket验证码的报错有关问题 关于socket验证码的报错问题
JSP验证码刷新报错:java.net.SocketException: Connection reset by peer: socket write error 浏览次数:2039次悬赏分:30 | 解决时间:2010-1-26 20:52 | 提问者:zhou7530169 估半是我生.........
[1]viewholder的施用
来源: 互联网 发布时间: 2014-02-18
viewholder的使用
Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。
优化的思路两种:
1. View的重用
View的每次创建是比较耗时的,因此对于getview方法传入的convertView应充分利用 != null的判断
2.ViewHolder的应用
View的findViewById()方法也是比较耗时的,因此需要考虑只调用一次,之后就用View.getTag()方法来获得ViewHolder对象。
下面是优化后的代码供参考:
哈哈。谢谢。
Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。
优化的思路两种:
1. View的重用
View的每次创建是比较耗时的,因此对于getview方法传入的convertView应充分利用 != null的判断
2.ViewHolder的应用
View的findViewById()方法也是比较耗时的,因此需要考虑只调用一次,之后就用View.getTag()方法来获得ViewHolder对象。
下面是优化后的代码供参考:
public class MyAdapter extends BaseAdapter { private Context mContext; private LayoutInflater mInflater; public MyAdapter(Context context) { this.mContext = context; mInflater = LayoutInflater.from(mContext); } public int getCount() { return mmsList.size(); } public Object getItem(int arg0) { return arg0; } public long getItemId(int arg0) { return arg0; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.mmslistitem, null); holder.img = (ImageView) convertView.findViewById(R.id.mmsflag); holder.subject = (TextView) convertView .findViewById(R.id.mmssubject); holder.date = (TextView) convertView.findViewById(R.id.mmsdate); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } MMSDBItem mmsItem = mmsList.get(position); holder.subject.setText(mmsItem.getSubject()); String today = DateFormat.format("yyyy-MM-dd", System.currentTimeMillis()).toString(); String dateStr = DateFormat.format("yyyy-MM-dd kk:mm", mmsItem.getDate()).toString(); holder.date.setText(dateStr); if (mmsItem.getFlag() == 0) { holder.img.setBackgroundResource(R.drawable.new_message_32); } else { holder.img .setBackgroundResource(R.drawable.message_already_read_32); } return convertView; } public final class ViewHolder { public ImageView img; public TextView subject; public TextView date; } }
1 楼
xiaojian623
2011-09-13
好乱的代码~~~
2 楼
xiaojian623
2011-09-13
个人按理解分段的代码:
public class MyAdapter extends BaseAdapter { private Context mContext; private LayoutInflater mInflater; public MyAdapter(Context context) { this.mContext = context; mInflater = LayoutInflater.from(mContext); } public int getCount() { return mmsList.size(); } public Object getItem(int arg0) { return arg0; } public long getItemId(int arg0) { return arg0; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.mmslistitem, null); holder.img = (ImageView) convertView.findViewById(R.id.mmsflag); holder.subject = (TextView) convertView .findViewById(R.id.mmssubject); holder.date = (TextView) convertView.findViewById(R.id.mmsdate); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } MMSDBItem mmsItem = mmsList.get(position); holder.subject.setText(mmsItem.getSubject()); String today = DateFormat.format("yyyy-MM-dd", System.currentTimeMillis()).toString(); String dateStr = DateFormat.format("yyyy-MM-dd kk:mm", mmsItem.getDate()).toString(); holder.date.setText(dateStr); if (mmsItem.getFlag() == 0) { holder.img.setBackgroundResource(R.drawable.new_message_32); } else { holder.img .setBackgroundResource(R.drawable.message_already_read_32); } return convertView; } public final class ViewHolder { public ImageView img; public TextView subject; public TextView date; } }
3 楼
flex_莫冲
2011-09-13
xiaojian623 写道
好乱的代码~~~
哈哈。谢谢。
4 楼
xiaohexing374
2011-11-07
[2] 定时发送GPS信息开机起步
来源: 互联网 发布时间: 2014-02-18
定时发送GPS信息开机启动
主页面
package com.dongqin.cn;
import com.dongqin.cn.service.LocationService;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
TextView myTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//平板必须添加否则无法联网
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
setContentView(R.layout.main);
Intent intent=new Intent();
intent.setClass(MainActivity.this, LocationService.class);
startService(intent);
finish();
Toast.makeText(this, "开始服务", Toast.LENGTH_SHORT).show();
}
}
Service页面
package com.dongqin.cn.service;
import com.dongqin.cn.sendinfo.SendInfo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class LocationService extends Service {
SendInfo send;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setClass(LocationService.this, SendInfo.class);
startActivity(i);
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
}
发送信息页面
package com.dongqin.cn.sendinfo;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.dongqin.cn.R;
import com.dongqin.cn.soap.SendKsoap;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class SendInfo extends Activity {
TextView myTextView;
String pcId;
double latitude;
double longitude;
String currentTime;
String fangshi="";
//线程使用
Handler myHandler;
LocationThread myThread;
//
LocationManager locationManager;
SendKsoap ksoap;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//平板上网必加
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
setContentView(R.layout.main);
finish();
//开始发送
//通过系统服务,取得LocationManager对象
locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
startSend();
}
public void startSend()
{
myThread=new LocationThread();
myHandler=new Handler();
myHandler.post(myThread);
}
//获取本身信息
public void getComputerInfo()
{
//指纹
// String fingerprint=android.os.Build.FINGERPRINT.toString();
//ID
pcId=android.os.Build.ID.toString();
}
//位置信息经纬度
public void getLocationInfo()
{
//GPS信号
Location locationGPS = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//网络GPS信号
Location locationNet = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//一个特殊的位置提供接收位置,而不会发起一个位置修复。
// 消极的提供者 一个特殊的接受位置信息提供者,没有实际初始化一个固定的位置
Location location = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
// Log.i("--->location1",""+locationGPS);
// Log.i("--->location2",""+locationNet);
// Log.i("--->location",""+location);
if(locationGPS!=null)
{
fangshi = "GPS";
// 纬度
latitude = locationGPS.getLatitude();
// 经度
longitude = locationGPS.getLongitude();
}else{
if (locationNet != null) {
fangshi = "net";
// 纬度
latitude = locationNet.getLatitude();
// 经度
longitude = locationNet.getLongitude();
} else {
if (location != null) {
fangshi = "PASSIVE";
// 纬度
latitude = location.getLatitude();
// 经度
longitude = location.getLongitude();
} else {
latitude = 0;
longitude = 0;
}
}
}
}
//当前时间信息
public void getCurrentTime()
{
SimpleDateFormat formatter=new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
Date curDate=new Date(System.currentTimeMillis());//获取当前时间
currentTime=formatter.format(curDate);
}
//发送消息
public void sendInfo()
{
ksoap=new SendKsoap();
String test=ksoap.sendInfo(pcId,""+latitude,""+longitude, currentTime);
// Log.i("--->ksoap",""+test);
}
//线程每隔几秒调用
public class LocationThread implements Runnable
{
@Override
public void run()
{
// 获取本机信息
getComputerInfo();
// 获得当前时间
getCurrentTime();
// 获取经纬度信息
getLocationInfo();
// 发送消息
sendInfo();
//隔4秒钟调用线程
myHandler.postDelayed(myThread, 4000);
}
}
}
向服务器传值
package com.dongqin.cn.soap;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.util.Log;
public class SendKsoap {
//指定webService的命名空间
private static final String namespace="http://DefaultNamespace";
//调用webService中的方法
private String methodName="test";
//wsdl的webService的IP
private String serviceUrl="http://192.168.1.106:9080/axis/service/DataSynMainService.jws?wsdl";
public String sendInfo(String pcId,String latitude,String longitude,String currentTime)
{
// Log.i("---->ksoap","pcID"+pcId+"latitude"+latitude+"longitude"+longitude+"currentTime"+currentTime);
//创建SoapObject对象,并指定webService的命名空间和方法名
SoapObject soapObject=new SoapObject(namespace,methodName);
//WebService方法的参数
soapObject.addProperty("pcId", pcId);
soapObject.addProperty("latitude", latitude);
soapObject.addProperty("longitude", longitude);
soapObject.addProperty("currentTime", currentTime);
//创建SoapSerializationEnvelope对象,并指定webService的版本
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
//设置bodyOut属性
envelope.bodyOut=soapObject;
//AndroidHttpTransport对象,并指定WSDL文档的URL
AndroidHttpTransport ht=new AndroidHttpTransport(serviceUrl);
try{
//调用WebService的方法
ht.debug=true;
ht.call(null, envelope);
if(envelope.getResponse()!=null)
{
//使用getResponse方法获得WebService返回的结果
SoapObject result=(SoapObject)envelope.bodyIn;
//直接获取方法返回值
String strResult=result.getProperty("testReturn").toString();
// Log.i("--->result",""+strResult);
return strResult;
}
}catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
开机启动页面
package com.dongqin.cn.receiver;
import com.dongqin.cn.service.LocationService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class LocationReceiver extends BroadcastReceiver
{
//接受Intent的源
static final String ACTION = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(ACTION))
{
context.startService(
new Intent(context,LocationService.class));
//启动倒计时服务
Toast.makeText(context, "广播服务启动!", Toast.LENGTH_LONG).show();
}
}
}
//manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dongqin.cn"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="12" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".receiver.LocationReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<activity android:name=".sendinfo.SendInfo" />
<service android:name=".service.LocationService" android:enabled="true"/>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
主页面
package com.dongqin.cn;
import com.dongqin.cn.service.LocationService;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
TextView myTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//平板必须添加否则无法联网
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
setContentView(R.layout.main);
Intent intent=new Intent();
intent.setClass(MainActivity.this, LocationService.class);
startService(intent);
finish();
Toast.makeText(this, "开始服务", Toast.LENGTH_SHORT).show();
}
}
Service页面
package com.dongqin.cn.service;
import com.dongqin.cn.sendinfo.SendInfo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class LocationService extends Service {
SendInfo send;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setClass(LocationService.this, SendInfo.class);
startActivity(i);
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
}
发送信息页面
package com.dongqin.cn.sendinfo;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.dongqin.cn.R;
import com.dongqin.cn.soap.SendKsoap;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class SendInfo extends Activity {
TextView myTextView;
String pcId;
double latitude;
double longitude;
String currentTime;
String fangshi="";
//线程使用
Handler myHandler;
LocationThread myThread;
//
LocationManager locationManager;
SendKsoap ksoap;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//平板上网必加
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
setContentView(R.layout.main);
finish();
//开始发送
//通过系统服务,取得LocationManager对象
locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
startSend();
}
public void startSend()
{
myThread=new LocationThread();
myHandler=new Handler();
myHandler.post(myThread);
}
//获取本身信息
public void getComputerInfo()
{
//指纹
// String fingerprint=android.os.Build.FINGERPRINT.toString();
//ID
pcId=android.os.Build.ID.toString();
}
//位置信息经纬度
public void getLocationInfo()
{
//GPS信号
Location locationGPS = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//网络GPS信号
Location locationNet = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//一个特殊的位置提供接收位置,而不会发起一个位置修复。
// 消极的提供者 一个特殊的接受位置信息提供者,没有实际初始化一个固定的位置
Location location = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
// Log.i("--->location1",""+locationGPS);
// Log.i("--->location2",""+locationNet);
// Log.i("--->location",""+location);
if(locationGPS!=null)
{
fangshi = "GPS";
// 纬度
latitude = locationGPS.getLatitude();
// 经度
longitude = locationGPS.getLongitude();
}else{
if (locationNet != null) {
fangshi = "net";
// 纬度
latitude = locationNet.getLatitude();
// 经度
longitude = locationNet.getLongitude();
} else {
if (location != null) {
fangshi = "PASSIVE";
// 纬度
latitude = location.getLatitude();
// 经度
longitude = location.getLongitude();
} else {
latitude = 0;
longitude = 0;
}
}
}
}
//当前时间信息
public void getCurrentTime()
{
SimpleDateFormat formatter=new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
Date curDate=new Date(System.currentTimeMillis());//获取当前时间
currentTime=formatter.format(curDate);
}
//发送消息
public void sendInfo()
{
ksoap=new SendKsoap();
String test=ksoap.sendInfo(pcId,""+latitude,""+longitude, currentTime);
// Log.i("--->ksoap",""+test);
}
//线程每隔几秒调用
public class LocationThread implements Runnable
{
@Override
public void run()
{
// 获取本机信息
getComputerInfo();
// 获得当前时间
getCurrentTime();
// 获取经纬度信息
getLocationInfo();
// 发送消息
sendInfo();
//隔4秒钟调用线程
myHandler.postDelayed(myThread, 4000);
}
}
}
向服务器传值
package com.dongqin.cn.soap;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.util.Log;
public class SendKsoap {
//指定webService的命名空间
private static final String namespace="http://DefaultNamespace";
//调用webService中的方法
private String methodName="test";
//wsdl的webService的IP
private String serviceUrl="http://192.168.1.106:9080/axis/service/DataSynMainService.jws?wsdl";
public String sendInfo(String pcId,String latitude,String longitude,String currentTime)
{
// Log.i("---->ksoap","pcID"+pcId+"latitude"+latitude+"longitude"+longitude+"currentTime"+currentTime);
//创建SoapObject对象,并指定webService的命名空间和方法名
SoapObject soapObject=new SoapObject(namespace,methodName);
//WebService方法的参数
soapObject.addProperty("pcId", pcId);
soapObject.addProperty("latitude", latitude);
soapObject.addProperty("longitude", longitude);
soapObject.addProperty("currentTime", currentTime);
//创建SoapSerializationEnvelope对象,并指定webService的版本
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
//设置bodyOut属性
envelope.bodyOut=soapObject;
//AndroidHttpTransport对象,并指定WSDL文档的URL
AndroidHttpTransport ht=new AndroidHttpTransport(serviceUrl);
try{
//调用WebService的方法
ht.debug=true;
ht.call(null, envelope);
if(envelope.getResponse()!=null)
{
//使用getResponse方法获得WebService返回的结果
SoapObject result=(SoapObject)envelope.bodyIn;
//直接获取方法返回值
String strResult=result.getProperty("testReturn").toString();
// Log.i("--->result",""+strResult);
return strResult;
}
}catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
开机启动页面
package com.dongqin.cn.receiver;
import com.dongqin.cn.service.LocationService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class LocationReceiver extends BroadcastReceiver
{
//接受Intent的源
static final String ACTION = "android.intent.action.BOOT_COMPLETED";
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(ACTION))
{
context.startService(
new Intent(context,LocationService.class));
//启动倒计时服务
Toast.makeText(context, "广播服务启动!", Toast.LENGTH_LONG).show();
}
}
}
//manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dongqin.cn"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="12" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".receiver.LocationReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<activity android:name=".sendinfo.SendInfo" />
<service android:name=".service.LocationService" android:enabled="true"/>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
[3] 关于socket验证码的报错有关问题
来源: 互联网 发布时间: 2014-02-18
关于socket验证码的报错问题
JSP验证码刷新报错:java.net.SocketException: Connection reset by peer: socket write error 浏览次数:2039次悬赏分:30 | 解决时间:2010-1-26 20:52 | 提问者:zhou7530169
估半是我生成验证码图片的JSP文件的问题,我是先写了一个类,然后导入JSP文件中,把图片地址连到这个文件。
我写的工具类代码如下:
public class MakePicNum {
private char[] mapTable = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9' };
public String getCertPic(int width,int height,OutputStream os){
if(width<=0)width=60;
if(height<=0)height=20;
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, width, height);
g.setColor(Color.black);
g.drawRect(0, 0, width-1, height-1);
String strEnsure="";
for(int i=0;i<4;i++){
strEnsure+=mapTable[(int)(mapTable.length*Math.random())];
}
g.setColor(Color.black);
g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
String str=strEnsure.substring(0, 1);
g.drawString(str, 8, 17);
str=strEnsure.substring(1, 2);
g.drawString(str, 20, 15);
str=strEnsure.substring(2, 3);
g.drawString(str, 35, 18);
str=strEnsure.substring(3, 4);
g.drawString(str, 45, 15);
Random rand=new Random();
for(int i=0;i<10;i++){
int x=rand.nextInt(width);
int y=rand.nextInt(height);
g.drawOval(x, y, 1, 1);
}
g.dispose();
try{
ImageIO.write(image,"JPEG",os);
}catch(Exception e){
e.printStackTrace();
return "";
}
return strEnsure;
}
}
生成图片的JSP代码为:
<%@page contentType="image/jpeg"%>
<jsp:useBean id="image" scope="page" />
<%String str=image.getCertPic(0,0,response.getOutputStream());
session.setAttribute("certnum",str);
out.clear();
response.flushBuffer();
%>
大家帮我看一看是哪的问题,我已经弄了六个小时了,网上找到些答案还是不能解决问题。补充一点,如果不写out.clear();
response.flushBuffer();会多报一个错:getOutputStream() has already been called for this response
最佳答案 太奇怪,我测试了一下你的代码,很好用阿,采用两种方式都没有问题
直接访问img.jsp或者访问html文件的img标签,都没有问题。
补充:
我是在本地访问的,如果你访问其它计算机,那么看看是否是防火墙的问题。代码应该没有问题。
分享给你的朋友吧:
i贴吧
新浪微博
腾讯微博
QQ空间
人人网
豆瓣
MSN
对我有帮助
3回答时间:2010-1-26 11:38 | 我来评论
向TA求助 回答者: zeus3288 | 七级采纳率:50%
擅长领域: JAVA相关 数据库 C#/.NET
参加的活动: 暂时没有参加的活动
提问者对于答案的评价:
劳您费心了,还帮我试了一下。把连接图片改成这样<img src='/blog_article/makePic/index.html' id='pic' onclick="chk_image();"/>
相关内容
2011-4-15 ClientAbortException: java.net.SocketException: Connection reset by... 2 2011-3-13 tomcat环境中使用 MultipartRequest 类 后台报错 java.net.SocketExcept... 2009-5-7 java.net.SocketException: Connection reset 15 2011-5-30 启动eclipse —help-eclipse MarkPlace 报java.net.SocketException: Co... 1 2006-8-30 java.sql.SQLException: Connection reset by peer: socket write error 8 更多相关问题>>
查看同主题问题: connection reset 验证码 刷新
等待您来回答1回答5连接池 Connection Pool 问题2回答15JAVA/JSP删除文件语句问题~~!2回答5JSP启动TOMCAT时的错误Catalina.stop:0回答org.apache.jasper.JasperException: /dbselect.jsp(2,17) quote symb...2回答在jsp中将图片存入数据库发生的一些问题更多等待您来回答的问题>>
其他回答 共2条
建议你使用 Kaptcha 验证码插件,详细访问http://code.google.com/p/kaptcha/ 这里,很简单实用。 回答者: sokoo108 | 七级 | 2010-1-26 08:24
生成图片的JSP代码为:
这个页面在String str前加一句话:response.reset();去掉,out.clear。
JSP验证码刷新报错:java.net.SocketException: Connection reset by peer: socket write error 浏览次数:2039次悬赏分:30 | 解决时间:2010-1-26 20:52 | 提问者:zhou7530169
估半是我生成验证码图片的JSP文件的问题,我是先写了一个类,然后导入JSP文件中,把图片地址连到这个文件。
我写的工具类代码如下:
public class MakePicNum {
private char[] mapTable = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9' };
public String getCertPic(int width,int height,OutputStream os){
if(width<=0)width=60;
if(height<=0)height=20;
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, width, height);
g.setColor(Color.black);
g.drawRect(0, 0, width-1, height-1);
String strEnsure="";
for(int i=0;i<4;i++){
strEnsure+=mapTable[(int)(mapTable.length*Math.random())];
}
g.setColor(Color.black);
g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
String str=strEnsure.substring(0, 1);
g.drawString(str, 8, 17);
str=strEnsure.substring(1, 2);
g.drawString(str, 20, 15);
str=strEnsure.substring(2, 3);
g.drawString(str, 35, 18);
str=strEnsure.substring(3, 4);
g.drawString(str, 45, 15);
Random rand=new Random();
for(int i=0;i<10;i++){
int x=rand.nextInt(width);
int y=rand.nextInt(height);
g.drawOval(x, y, 1, 1);
}
g.dispose();
try{
ImageIO.write(image,"JPEG",os);
}catch(Exception e){
e.printStackTrace();
return "";
}
return strEnsure;
}
}
生成图片的JSP代码为:
<%@page contentType="image/jpeg"%>
<jsp:useBean id="image" scope="page" />
<%String str=image.getCertPic(0,0,response.getOutputStream());
session.setAttribute("certnum",str);
out.clear();
response.flushBuffer();
%>
大家帮我看一看是哪的问题,我已经弄了六个小时了,网上找到些答案还是不能解决问题。补充一点,如果不写out.clear();
response.flushBuffer();会多报一个错:getOutputStream() has already been called for this response
最佳答案 太奇怪,我测试了一下你的代码,很好用阿,采用两种方式都没有问题
直接访问img.jsp或者访问html文件的img标签,都没有问题。
补充:
我是在本地访问的,如果你访问其它计算机,那么看看是否是防火墙的问题。代码应该没有问题。
分享给你的朋友吧:
i贴吧
新浪微博
腾讯微博
QQ空间
人人网
豆瓣
MSN
对我有帮助
3回答时间:2010-1-26 11:38 | 我来评论
向TA求助 回答者: zeus3288 | 七级采纳率:50%
擅长领域: JAVA相关 数据库 C#/.NET
参加的活动: 暂时没有参加的活动
提问者对于答案的评价:
劳您费心了,还帮我试了一下。把连接图片改成这样<img src='/blog_article/makePic/index.html' id='pic' onclick="chk_image();"/>
相关内容
2011-4-15 ClientAbortException: java.net.SocketException: Connection reset by... 2 2011-3-13 tomcat环境中使用 MultipartRequest 类 后台报错 java.net.SocketExcept... 2009-5-7 java.net.SocketException: Connection reset 15 2011-5-30 启动eclipse —help-eclipse MarkPlace 报java.net.SocketException: Co... 1 2006-8-30 java.sql.SQLException: Connection reset by peer: socket write error 8 更多相关问题>>
查看同主题问题: connection reset 验证码 刷新
等待您来回答1回答5连接池 Connection Pool 问题2回答15JAVA/JSP删除文件语句问题~~!2回答5JSP启动TOMCAT时的错误Catalina.stop:0回答org.apache.jasper.JasperException: /dbselect.jsp(2,17) quote symb...2回答在jsp中将图片存入数据库发生的一些问题更多等待您来回答的问题>>
其他回答 共2条
建议你使用 Kaptcha 验证码插件,详细访问http://code.google.com/p/kaptcha/ 这里,很简单实用。 回答者: sokoo108 | 七级 | 2010-1-26 08:24
生成图片的JSP代码为:
这个页面在String str前加一句话:response.reset();去掉,out.clear。
最新技术文章: