初学 Anroid 报错指南

在学习 Android Pro 4期间遇到了些问题,这些问题都是低级错误,在网上搜索也容易获得解决办法。作为初学,还是记录下这些低级错误的解决方法,希望对他人有益。

1. 第五章,学习使用Intent。在调用以下拨号应用中,发生了错误。

    public static void call(Activity activity)
    {
	    Intent intent = new Intent(Intent.ACTION_CALL);
	    intent.setData(Uri.parse("tel:555-555-5555"));
	    activity.startActivity(intent);
    }    

    问题是需要在androidmanifest.xml中添加对拨号操作的许可,如下。

<uses-permission android:name="android.permission.CALL_PHONE"/>

2. 第五章,学习使用Intent。在调用打开网站的应用中,发生了错误。

    public static void invokeWebSearch(Activity activity)
    {
        Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
        intent.setData(Uri.parse("www.google.com")); // 错误
        activity.startActivity(intent);
    } 

    问题是URI依赖起始的格式信息(scheme),如果没找到正确的格式信息,Uri将不能正确选择正确的应用。一般来说,ACTION_WEB_SEARCH关乎"http:","https:",ACTION_CALL 关乎“tel:”,地图坐标定位关乎“geo:”,根据应用不同,不排除其他组合,具体参考http://developer.android.com/reference/android/content/Intent.html。代码修改后如下。

    public static void invokeWebSearch(Activity activity)
    {
        Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
        intent.setData(Uri.parse("http://www.google.com")); // 正确
        activity.startActivity(intent);
    }
3. 第五章,学习使用Intent。在调用如下地图导航应用时,发生错误   

    public static void showMapAtLatLong(Activity activity)
    {
		Intent intent = new Intent(Intent.ACTION_VIEW);
		//geo:lat,long?z=zoomlevel&q=question-string
		intent.setData(Uri.parse("geo:0,0?z=4&q=business+near+city"));
		activity.startActivity(intent);
    }
      后来在网上找到一篇博文,解释了这种情况是模拟器不支持造成。于是用以下代码来做分支,在模拟器上就临时用网页提供功能。

    private static boolean isEmulator() {
        return (Build.MODEL.equals("sdk")) || (Build.MODEL.equals("google_sdk"));
    }

    public static void showMapAtLatLong(Activity activity)
    {
		Intent intent = new Intent(Intent.ACTION_VIEW);
		//geo:lat,long?z=zoomlevel&q=question-string
		if( isEmulator() ) {
			intent.setData(Uri.parse("http://maps.google.com/?q=0,0?z=4&q=business+near+city"));
		} else {
			intent.setData(Uri.parse("geo:0,0?z=4&q=business+near+city"));
		}
		activity.startActivity(intent);
    }

4. 第六章,学习使用控件。使用ListView

  创建一个新的布局文件 res \ layout \ myListView.xml,并使用下面代码,报错“Invalid file name: must contain only [a-z0-9_.]”。原因是资源文件名都要符合正则表达式“[a-z0-9_.]”,即只能包含字母a-z、数字0-9、"_"与"."。

public class UIuseXMLActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);
        setContentView(R.layout.myListView);  // 错误
        略。。。
改成小写 mylistview.xml 即可。

5. 第六章,学习使用控件。使用ListView

  使用上一节的Activity类型UIuseXML,它继承ListActivity,而不是通常的Activity。同时创建一个新的布局文件 res \ layout \ mylistview.xml,在这个文件里添加ListView控件,如下。

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <ListView
        android:id="@+id/listview1" // 错误
        android:layout_width="match_parent"
        android:layout_height="208dp" >
    </ListView>
</LinearLayout>
并使用下面代码,报错“ must have a ListView whose id attribute is 'android.R.id.list'”。原因是ListActivity内需要这个android内置资源id,因而修改如下。

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <ListView
        android:id="@android:id/list" // 正确
        android:layout_width="match_parent"
        android:layout_height="208dp" >
    </ListView>
</LinearLayout>







  





你可能感兴趣的:(初学 Anroid 报错指南)