来自为知笔记

开发环境搭建资源
http://www.androiddevtools.cn/

当出现 compile with 没有选项时,在eclipse更新最新的adt就可以了。


R.java不会自动更新或者不会自动新建的问题
自己写的工程,然后在代码引用xml资源的时候引用不了,原来是R.Java里的id不会自动更新,clean了也没用,然后看了一下报错信息,是发现drawable目录下有些图片的文件名字是大写的形式,原来是系统中不允许这些文件名字含有大写(个人猜测是window和Linux的文件命名规则差异有关),把那些文件名字全改成小写形式就行了。


关于avtivity还没启动程序就崩溃的几个原因
有一些组件的对象实例化是在全局变量那里new是不行的,比如
ListView listView = (ListView) findViewById(R.id.wifi_list);
不能在全局变量变量中出现。

当然这句话也不能在方法setContentView(); 之前出现

TextView.steText一运行就崩溃的原因
原本的想法是按一个按钮,然后就修改textview的内容,可以运行到.steText这一行代码的时候就崩溃。原因就是因为在layout的xml文件中,有关于textView的组件代码的时候我写错了。

http://ask.csdn.net/questions/24207

关于new一个类的问题
在anroid开发过程中,在同一包下的不同类中(即同一目录,但是不在同一文件),我需要在一个文件中new另一个文件中的类的时候,却发现编译过不了。
代码为
user us = new user;
错误的原因原来是新建一个类的对象,需要加上一个括号,正确形式应该为
user us = new user();

这种错误应该不局限于在哪个包中,而是新建一个对象的时候都应该这样,括号代表的是新建一个对象的时候传入的参数为空。

用getSharedPreferences获取一个对象产生空指针的问题
用SharedPreferences来存储键值是,我是用了两个类,一个是activity类,一个是自己定义的user类(user类继承了activity),当点击activity类的一个按钮是,就调用user类的saveuserinfo方法,其中saveuserinfo方法就是用SharedPreferences,但是执行到getSharedPreferences时程序总是会崩溃。用了ContextWrapper里的getSharedPreferences也是不行,activity的getSharedPreferences还是一样的情况。
最后找到了问题,原来是使用getSharedPreferences的时候,要用当前activity的getSharedPreferences。下面贴上代码
首先,我写了一个工具类,用来进行SharedPreferences的相关操作:

Java代码
package com.iteye.dengwho;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class SharedPreferencesUtil {
private SharedPreferences sp;
private Editor editor;
private final static String SP_NAME = “mydata”;
private final static int MODE = Context.MODE_WORLD_READABLE
+ Context.MODE_WORLD_WRITEABLE;

public SharedPreferencesUtil(Context context) {  
    sp = context.getSharedPreferences(SP_NAME, MODE);  
    editor = sp.edit();  
}  

public boolean save(String key, String value) {  
    editor.putString(key, value);  
    // 亿万不要忘了加commit呐~~~!!!!  
    return editor.commit();  
}  

public String read(String key) {  
    String str = null;  
    str = sp.getString(key, null);  
    return str;  
}  

}

这里我用我的血泪屎来提醒大家在save的操作时1000万不要忘了commit()。
另外,因为SharedPreferences本身就是以XML保存文件的,所以我们不用给它命名时多加“.xml”后缀。

下面是Activity类:

Java代码
package com.iteye.dengwho;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SharedPreferenced_DemoActivity extends Activity {
private Button saveBtn;
private Button readBtn;
private EditText inputEv;
private EditText showEv;
private SharedPreferencesUtil util;

public void init() {  
    util = new SharedPreferencesUtil(this);  
    saveBtn = (Button) findViewById(R.id.save_btn);  
    readBtn = (Button) findViewById(R.id.read_btn);  
    inputEv = (EditText) findViewById(R.id.input_et);  
    showEv = (EditText) findViewById(R.id.showinfo_et);  
    // 设置监听  
    setListener();  
}  


public void setListener() {  
    saveBtn.setOnClickListener(new OnClickListener() {  
        public void onClick(View v) {  
            boolean b = util.save("mykey", inputEv.getText().toString());  
            String msg;  
            if (b) {  
                msg = "保存成功";  
            } else {  
                msg = "保存失败";  
            }  
            Toast.makeText(SharedPreferenced_DemoActivity.this, msg,  
                    Toast.LENGTH_SHORT).show();  
        }  
    });  

    readBtn.setOnClickListener(new OnClickListener() {  
        public void onClick(View v) {  
            System.out.println("read...");  
            String value = util.read("mykey");  
            showEv.setText(value);  
        }  
    });  
}  

@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
    init();  
}  

}

来源: http://blog.sina.com.cn/s/blog_671d2e4f0100vcr7.html

在gethtml方法中,执行到connection.getInputStream这行抛出
android.os.NetworkOnMainThreadException错误的解决
这是因为最新的sdk版本不允许在主线程中对网络进行操作,需要另外开启线程。参考资料:
http://bbs.51cto.com/viewthread.php?tid=1020577&pid=5153749&page=1&extra
1.估计楼主要的sdk比较新,NetworkOnMainThreadException 这个错误是说你在main线程里面执行网络操作。最新sdk版本是不允许的。(为了避免anr异常出现)。
所以,解决的话,只要另外开个线程,把网络操作放到新线程里面就好啦。:lol1

这是这个异常的文档说明:
The exception that is thrown when an application attempts to perform a networking operation on its main thread.
This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it’s heavily discouraged.

2.http://www.cnblogs.com/sjrhero/articles/2606833.html
异常:android.os.NetworkOnMainThreadException
Android 4.1项目:使用新浪微博分享时报:

  android.os.NetworkOnMainThreadException

网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧。那么网上的朋友也给出了相应的解决方案,这叫上有政策下有对策:

一:在发起Http请求的Activity里面的onCreate函数里面添加如下代码:

//详见StrictMode文档
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
如果正在做的项目不是Android 4.0的是看不到StrictMode类的。我也是用的网上给的com_weibo_android.jar。但是这个jar包下载下来的时候是2.3的,要先转换成Android 4.0的项目,再在分享对应的ShareActivity的onCreate()函数中添加上面的两行代码。这样就不会报这个错误了。

二:使用Thread、Runnable、Handler这三个类:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.share_mblog_view);
new Thread(runnable).start();
}

Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
String val = data.getString(“value”);
Log.i(“mylog”,”请求结果为–>” + val);
}
}

Runnable runnable = new Runnable(){
@Override
public void run() {
TODO: http request.
//
Message msg = new Message();
Bundle data = new Bundle();
data.putString(“value”,”请求结果”);
msg.setData(data);
handler.sendMessage(msg);
}
}


关于我自己的手机(乐蛙os4.12)收不到系统广播

在做一个接收系统的wifi状态改变的广播中,静态注册。在其原生os上测试,是可以正常接收到的,但是在我自己的手机上却是接收不到。代码没有问题,经测试,将app安装为系统app的时候是可以接收到的。或者作为应用级的app时,是可以接收到其他的应用发出来的广播。这证明系统级的app可以接收到广播,而应用级的app不可以接收到系统广播,(也有可能系统广播数值被改变)我想这跟乐蛙os的防流氓软件有关。

Android XML属性比较多,全部记住不太现实,用的时候查文档是一条途径。如何迅速找到所需的XML属性。

Android包下面android.R.styleable 类包含下面所有组件相关的XML属性。


eclipse快速跳转到相关类的方法快捷键

点击方法,然后按F3就行了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值