lisa项目续

来源:互联网 发布:太湖水利设计院知乎 编辑:程序博客网 时间:2024/05/01 12:52

2014.4.17

lisa1.1正式出炉,先上程序,今晚补上说明

package lisa.l;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.text.DateFormat;import java.util.Date;import android.os.Bundle;import android.os.Environment;import android.app.Activity;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 {// five sub-object, including 5 edittext and one textview will be operated// in this activity, the only sub-object not declared here is textView1String path = Environment.getExternalStorageDirectory() + "/lisa/";File filex = new File(path);File m1 = new File(path + "m1.txt");//lisa 1.2中把五个txt文件合并为一个xml文件,xml文件略大于5个txt文件之和File m2 = new File(path + "m2.txt");File m3 = new File(path + "m3.txt");File m4 = new File(path + "m4.txt");File m5 = new File(path + "m5.txt");@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if (!filex.exists()) {try {filex.mkdirs();m1.createNewFile();m2.createNewFile();m3.createNewFile();m4.createNewFile();m5.createNewFile();} catch (Exception e) {e.printStackTrace();}}EditText editText1 = (EditText) findViewById(R.id.editText1);EditText editText2 = (EditText) findViewById(R.id.editText2);EditText editText3 = (EditText) findViewById(R.id.editText3);EditText editText4 = (EditText) findViewById(R.id.editText4);EditText editText5 = (EditText) findViewById(R.id.editText5);TextView textView = (TextView) findViewById(R.id.textView2);// show saved textshow(editText1, m1);show(editText2, m2);show(editText3, m3);show(editText4, m4);show(editText5, m5);// set the action of button on click// show the current dateString date = DateFormat.getDateInstance(DateFormat.FULL).format(new Date());textView.setText(date);}public void save(EditText edittext, File m) {// get text in sub-object editText and set it to file mDataOutputStream out;String s = edittext.getText().toString();try {// if any text exists in a EditText, a new file will be used to// store the new text instead of the old oneif (s.length() != 0) {m.delete();m.createNewFile();}out = new DataOutputStream(new FileOutputStream(m));out.writeUTF(s);out.close();} catch (Exception e) {e.printStackTrace();}}public void show(EditText edittext, File m) {// show texts in files if anyDataInputStream in;try {in = new DataInputStream(new FileInputStream(m));edittext.setText(in.readUTF());in.close();} catch (IOException e) {e.printStackTrace();}}public void onSaveClick(View v) {EditText editText1 = (EditText) findViewById(R.id.editText1);EditText editText2 = (EditText) findViewById(R.id.editText2);EditText editText3 = (EditText) findViewById(R.id.editText3);EditText editText4 = (EditText) findViewById(R.id.editText4);EditText editText5 = (EditText) findViewById(R.id.editText5);// save text in each EditText to each Filesave(editText1, m1);save(editText2, m2);save(editText3, m3);save(editText4, m4);save(editText5, m5);// show this after the save action is finishedToast.makeText(getApplicationContext(), "Saved Successfully!",Toast.LENGTH_SHORT).show();}public void onDeleteClick(View v) {EditText editText1 = (EditText) findViewById(R.id.editText1);EditText editText2 = (EditText) findViewById(R.id.editText2);EditText editText3 = (EditText) findViewById(R.id.editText3);EditText editText4 = (EditText) findViewById(R.id.editText4);EditText editText5 = (EditText) findViewById(R.id.editText5);EditText D = null;if (editText1.isFocused() == true)D = editText1;if (editText2.isFocused() == true)D = editText2;if (editText3.isFocused() == true)D = editText3;if (editText4.isFocused() == true)D = editText4;if (editText5.isFocused() == true)D = editText5;D.setText("");}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@drawable/lisaback"    tools:context=".MainActivity" >    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:text="@string/app_label"        android:textSize="16sp"        android:textStyle="italic"        android:typeface="serif" />    <TextView        android:id="@+id/textView2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_marginBottom="33dp"        android:layout_marginLeft="34dp"        android:text="@string/current_date"        android:textColor="@color/dark"        android:textStyle="italic"        android:typeface="serif" />    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_above="@+id/textView2"        android:layout_centerHorizontal="true"        android:background="@android:color/transparent"        android:onClick="onSaveClick"        android:text="@string/save"        android:textColor="@color/green"        android:textStyle="italic"        android:typeface="serif" />    <TextView        android:id="@+id/textView3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/textView2"        android:layout_below="@+id/editText5"        android:layout_marginTop="43dp"        android:textColor="@color/dark"        android:textStyle="italic"        android:typeface="serif" />    <Button        android:id="@+id/button2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_marginLeft="16dp"        android:layout_toRightOf="@+id/button1"        android:background="@android:color/transparent"        android:text="@string/delete"         android:onClick="onDeleteClick"/>    <EditText        android:id="@+id/editText1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/button2"        android:layout_marginTop="18dp"        android:ems="10"        android:hint="@string/task1"        android:inputType="textMultiLine" />    <EditText        android:id="@+id/editText2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/editText1"        android:ems="10"        android:hint="@string/task2"        android:inputType="textMultiLine" />    <EditText        android:id="@+id/editText3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/editText2"        android:ems="10"        android:hint="@string/task3"        android:inputType="textMultiLine" />    <EditText        android:id="@+id/editText4"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/editText3"        android:ems="10"        android:hint="@string/task4"        android:inputType="textMultiLine" />    <EditText        android:id="@+id/editText5"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/editText4"        android:ems="10"        android:hint="@string/task5"        android:inputType="textMultiLine" /></RelativeLayout>


 2014.5.1

将内容序列化存储到xml文件中

XmlSerializer serializer = Xml.newSerializer(); // 由android.util.Xml创建一个XmlSerializer实例DataOutputStream out = new DataOutputStream(new FileOutputStream(m));serializer.setOutput(out, "UTF-8"); // 设置输出方向为outserializer.startDocument("UTF-8", true);serializer.startTag("", "TaskList");serializer.startTag("", "Task");serializer.attribute("", "id", 1 + "");serializer.text(s1);serializer.endTag("", "Task");serializer.endTag("", "TaskList");serializer.endDocument();out.close();


2014.5.11

关于lisa的设想有很多,不过我发现更换背景功能室比较贴近现实需要的,先把这个实现了再说。


2014.7.26

lisa定位为简便、快捷、无广告的免费移动记事/笔记软件。


2014.8.2

lisa是作为一个记事本呢,还是一个日记本。如果是记事,文字简短,输入要快,保存后可能还要经常修改,背景以纯色为佳。如果是日记,文字较长,输入时间充裕,保存后一般不再修改,背景要赏心悦目,有保密需求,有云存储需求,有导出需求。市面上记事本较多,记事本功能简洁,而日记本较少,门槛较高。

 文字长度输入时间要修改吗背景其他需求市场现状记事本0-40快有时候要纯色没有多日记本0-400慢一般不要图片保密,云存储,导出少


2014.8.12

lisa下载量突破70了,91+安卓市场,lisa更名为Lisa随手记。版本1.4,百度平台还是给力些,应用宝卡在审核环节不动了。希望能有些评论或评分~。

下载地址:http://apk.hiapk.com/appinfo/lisa.i


2014.8.27

有以下工作要做:

1.手机端发送文件到PC端功能,即联网功能

2.保密记录显示问题

3.万能建长按


2014.8.29

ListView是手机上常用的控件,能够表现表格、列表的形式,与java中的ArrayList是很好的搭档。listview是一个viewgroup,将一组textview打包成列表。


2014.9.7

android获取ip有多种场景,wifi和GRPS不同,参考下文

android获取ip
一般滴在wifi连接条件下,在windows下java通过getLocalHost就能得到本机的局域网ip,而在android下这种方法只能得到127.0.0.1,只是因为android是基于linux的操作系统,linux并不完全支持该方法的功能,所以通过wifi获取ip是一种比较好的方式。
其他方法可以参考此贴java获取本地ip

2014.9.11
listview通过pointtoposition方法获得的是从0开始的序号。

2014.9.12
http message分四段:request line、headers、空行和body。entity就是body所含的内容。对于request来说,就是request body,一般是post的表单数据。对于response来说就是response body,一般是网页。request 和response都继承了http massage的格式,都包含body,也就都可以包含entity。
httpRequestHandler是个接口,其handler函数的request参数是httprequest,不能直接提取entity,只有httpEntityEnclosingRequest才能使用getEntity()来提取Entity。前者是后者的父类。所以必须先判断一下request类型,看看是否是此类型的Request,然后转换成httpEntityEnclosingRequest并使用getEntity()方法提取。参考此文。

2014.9.13
post表单总是content-length=0,Request body也就是请求正文啥也没有。弄了两天也没搞出来。今天才知道Android使用的org.apache是一个开源项目,不是下了可以直接安装的那种,这才找到了它的官方说明书,HttpCore Tutorial 。

2014.9.14
终于知道为什么没有正文了,参考此文,原因竟然是textarea没有name,
<div class="panel"><form method="post" enctype="text/plain"><textarea name ="new" id="edittext" cols=80 rows=8></textarea><br> <input id="add" type="submit" value="确定" /></form></div>
这么改就好了。

改后post报文如下
请求 POST / HTTP/1.1
Accept text/html, application/xhtml+xml, */*
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0; QQBrowser/7.7.26717.400) like Gecko
Referer http://192.168.1.101:9999/
Accept-Language zh-Hans-CN,zh-Hans;q=0.5
Content-Type text/plain
Accept-Encoding gzip, deflate
Host 192.168.1.101:9999
Content-Length 12
Connection Keep-Alive
Cache-Control no-cache 


浏览器对中文并非是单纯的编码,无论是使用ISO-8859-1还是utf-8,或是GB2312,都不是单纯的将字符转为对应的数码,而是加入了%,所以服务端解码时中文显示均为%+16位的数码,三个%代表一个汉字。浏览器这种编码方式是urlencoding,而不是一般的encoding,所以解码也需要专门的urldecode,而不是一般的decode。
http://tool.chinaz.com/Tools/URLEncode.aspx 使用这个工具后,可以对这个过程有个感性的认识。
String s=URLDecoder.decode(EntityUtils.toString(inentity), "utf-8");

httpcore没有提供相应的方法,至少我目前没看到。可以用java.net库提供的方法Stringjava.net.URLDecoder.decode(String s, String encoding) throwsUnsupportedEncodingException。

2014.9.18
httpService.handleRequest(conn, context);这句话经常会爆IO异常,原来是连接超时导致的异常,在这个时限内如果没有接到request,就视为连接超时,爆出IO异常。在handlerequest的方法内一定有个循环,时间一到,就跳出循环爆出异常。重建一次连接的耗时较长,如果能够保证连接复用,自然是复用最好。

1.3. HTTP exception handling

All HttpCore components potentially throw two types of exceptions: IOException in case of an I/O failure such as socket timeout or an socket reset andHttpException that signals an HTTP failure such as a violation of the HTTP protocol. Usually I/O errors are considered non-fatal and recoverable, whereas HTTP protocol errors are considered fatal and cannot be automatically recovered from. 


2014.9.22
ListView拖拽主要涉及到三个功能:
记录修改;
记录分组;
记录移位;

2014.9.27
lisa随手记已经在百度和360上架,百度搜索基本每次都能搜到
360搜索结果如下
360市场在这个下面

搜狗结果:
令人比较费解的是360没有把自己的360市场排在前面,而豌豆荚在百度和360搜索中都排名较高。
百度上发布了3版,1.4/1.5/1.6,1.4和1.5版的日均下载量2到3次,1.6版头四天的日均下载量达到了4次,后面怎样有待观察。累计下载200多次,但是按百度的每日数据来统计并没有这么多,所以很有可能是参混了安卓市场和91的下载量,另一种可能是百度每日数据统计的是用百度手机助手下载的次数,而200多次是包含了直接搜索下载(PC浏览器下载或者手机浏览器下载)的量。
360是1.6版才进入的市场,头2天的累计下载截至目前为止是16次,平均每天五次。


0 0
原创粉丝点击