lisa项目续

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 textView1
	String 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");

	@Override
	protected 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 text
		show(editText1, m1);
		show(editText2, m2);
		show(editText3, m3);
		show(editText4, m4);
		show(editText5, m5);
		// set the action of button on click
		// show the current date
		String 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 m
		DataOutputStream 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 one
			if (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 any
		DataInputStream 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 File
		save(editText1, m1);
		save(editText2, m2);
		save(editText3, m3);
		save(editText4, m4);
		save(editText5, m5);
		// show this after the save action is finished
		Toast.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("");
	}

	@Override
	public 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"); // 设置输出方向为out
		serializer.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不同,参考下文

一般滴在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库提供的方法 String java. net. URLDecoder.decode( String s, String encoding) throws UnsupportedEncodingException。

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值