最近的android项目开发问题总结

1、android通过get方式传递中文参数到java web服务器(tomcat)出现乱码

解决方法:

android使用URLEncoder编码

String  greenCityName ;

greenCityName = URLEncoder.encode(greenCityName ,"UTF-8");

web端使用

String greenCityName =request.getParameter("greenCityName");
     greenCityName= new String(greenCityName.getBytes("ISO8859-1"),"UTF-8");

 

2、android点击listview的item项没反应


     如listView.setOnItemClickListener(new OnItemClickListener()
           {
              
            public void onItemClick(AdapterView<?> parent, View view,
             int position, long id)
            {
                          viewItemDetail(position);
            }
           });    

错误原因:listview的元素里不能包括button、imageButton这些点击事件按钮,把它换成imageView就ok了

 

3、pageViewer的使用需要引用android-support-v4.jar这个特效包,把它放在libs文件夹下,如果libs没有自己手动添加,并build path到自己的项目中。在项目中遇到,page有2页,用AsyncTask异步获取2个列表,但有时第一个列表的数据无法正常显示,但web服务器端却执行了获取列表操作,故改成了第一个直接获取,后面的异步操作解决。暂时就这样解决,应该有更好的方法。


4、android开发百度地图,一直提示您的网络出错啦。 原因是 :公司无线网络wifi的问题,在公司无线网络中一直只显示网格,不显示图像,回到宿舍显示正常。坑,害我检查代码了好久。


5、android显示web后台fckeditor在线编辑器的内容,因为fckeditor保存到数据库的内容有html标签,故可以用

(Html.fromHtml(value.getString("servicecontent"),imageGetter, null));方法

Bundle value;
value=this.getIntent().getExtras();
TextView detailContent ;
detailContent.setText(Html.fromHtml(value.getString("servicecontent"),imageGetter, null));

final Html.ImageGetter imageGetter = new Html.ImageGetter() 
{


    public Drawable getDrawable(String source)
    {
    
        Drawable drawable=null;
    URL url;
    try {
        url = new URL(Config.common_url+source);
        drawable = Drawable.createFromStream(url.openStream(), "");
    	} catch (Exception e)
    	{
        e.printStackTrace();
        return null;
    	}
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());            
    return drawable;
    };
};


其中imageGetter主要是显示fckeditor里的图片,需要注意的是,这里的source字符串,fckeditor保存图片路径是/工程名/userfiles/image/这样的路径,而我们要让图片显示,还需要加上http://ip:port这些信息,故这里的
Config.common_url

就是http://ip:port信息。

 

后来我把fckeditor换成了kindEditor,发现kindEditor可以开启上传域名模式。

 

后来,发现采用textview加载网页内容很慢,故换成webview来实现,且更简单。

WebView content;

content.loadDataWithBaseURL(null,bun.getString("content"), "text/html", "UTF-8", null);
     content.setBackgroundColor(0x00000000);

 

 



 

6、在android4.0以后的版本,不要把网络这些耗时的操作放在ui线程里,可以使用handler或者AsyncTask这些异步操作,虽然可以用

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork()
.penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()

.build());

解决这个问题,但个人不推荐。

另外,webView操作应该放在ui线程里,虽然异步操作也没什么问题,但logout会有警告信息。

7、二维码生成,android使用很简单,使用google提供的zxing就能解决这个问题,在googlecode下载zxing包,引用core包,下面的代码就能实现通过字符串生成二维码。

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

import android.graphics.Bitmap;

public class Dcode {
	
	/**
	* 用字符串生成二维码
	* @param str
	* @author xiaoliouc
	* @return
	* @throws WriterException
	*/
	public static Bitmap Create2DCode(String str) throws WriterException {
	//生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
	BitMatrix matrix = new MultiFormatWriter().encode(str,BarcodeFormat.QR_CODE, 300, 300);
	int width = matrix.getWidth();
	int height = matrix.getHeight();
	//二维矩阵转为一维像素数组,也就是一直横着排了
	int[] pixels = new int[width * height];
	for (int y = 0; y < height; y++) {
	for (int x = 0; x < width; x++) {
	if(matrix.get(x, y)){
	pixels[y * width + x] = 0xff000000;
	}
	}
	}

	Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
	//通过像素数组生成bitmap,具体参考api
	bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
	return bitmap;
	}
	
}

8、android应用新浪、腾讯微博分享, 不管是其中哪一种,需要再开发者平台创建应用,申请key,审核资料等步骤,如果不审核身份,那只有通过添加测试账号测试,但不知道怎么回事,一直出问题,还是老老实实上传身份证件审核通过吧,暂时还没做,但思路算是清晰了。


9、在两个Activity跳转时,由于第二个Activity在启动时加载了较多数据,就会在启动之前出现一个短暂的黑屏时间,解决这个问题比较简单的处理方法是将第二个Activity的主题设置成透明的,这样在启动第二个Activity时的黑屏就变成了显示第一个Activity界面。这个分两步完成:

第一步:xxx/res/values/styles.xml中加入自定义Activity的Theme,如下所示:


[html] <style name="Transparent" parent="android:Theme.Light"> 
<!--将Activity的Theme设置成透明--> 
<item name="android:windowIsTranslucent">true</item> 
</style> 


<style name="Transparent" parent="android:Theme.Light">
<!--将Activity的Theme设置成透明-->
<item name="android:windowIsTranslucent">true</item>
</style>第二步:在AndroidManifest.xml中将第二个Activity的"android:theme"属性设置成刚才自定义的主题样式。如下所示:


[html] <activity 
android:name="com.yutao.customer.CustomerActivity" 
android:label="@string/app_name" 
android:theme="@style/Transparent"> 


<activity
android:name="com.yutao.customer.CustomerActivity"
android:label="@string/app_name"
android:theme="@style/Transparent"> 到此应该就不会出现那个讨厌的黑屏了。
详细出处参考:http://www.jb51.net/article/38373.htm


未完待续

 

 

你可能感兴趣的:(最近的android项目开发问题总结)