您的位置:首页 > 移动开发 > Android开发

Android问题集锦

2015-07-17 10:36 411 查看
1. ViewPager+Fragment滑动界面 在按home键的时候,出现java.lang.NullPointerException 

07-14 16:10:37.412: D/dalvikvm(13466): Debugger has detached; object registry had 1 entries

07-14 16:12:11.982: D/AndroidRuntime(13466): Shutting down VM

07-14 16:12:11.982: W/dalvikvm(13466): threadid=1: thread exiting with uncaught exception (group=0x41c2ed58)

07-14 16:12:11.982: E/AndroidRuntime(13466): FATAL EXCEPTION: main

07-14 16:12:11.982: E/AndroidRuntime(13466): Process: com.big.music.setting, PID: 13466

07-14 16:12:11.982: E/AndroidRuntime(13466): java.lang.NullPointerException

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.app.Activity.performSaveInstanceState(Activity.java:1171)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1223)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3167)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3226)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.app.ActivityThread.access$1100(ActivityThread.java:141)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1229)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.os.Handler.dispatchMessage(Handler.java:102)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.os.Looper.loop(Looper.java:136)

07-14 16:12:11.982: E/AndroidRuntime(13466): at android.app.ActivityThread.main(ActivityThread.java:5047)

07-14 16:12:11.982: E/AndroidRuntime(13466): at java.lang.reflect.Method.invokeNative(Native Method)

07-14 16:12:11.982: E/AndroidRuntime(13466): at java.lang.reflect.Method.invoke(Method.java:515)

07-14 16:12:11.982: E/AndroidRuntime(13466): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

07-14 16:12:11.982: E/AndroidRuntime(13466): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)

07-14 16:12:11.982: E/AndroidRuntime(13466): at dalvik.system.NativeStart.main(Native Method)

07-14 16:12:13.962: I/Process(13466): Sending signal. PID: 13466 SIG: 9

原因:没有设置fragment layout xml的id,导致save的时候出错。

解决办法:在fragment的layout xml 都添加 android id name, 比如 android:id="@+id/fragment1"

2.  [转]

问题:连接加密的热点 就可以连接,连接不加密的热点不能连接。addNetwork这个操作总是返回-1 

代码如下:这是connect

[java] view
plaincopy





public static boolean Connect(String SSID, String Password, int Type) {           

        WifiConfiguration wifiConfig = createWifiInfo(SSID, Password, Type);          

        if (wifiConfig == null) {  

        Log.v(TAG,"wifiConfig == null");  

            return false;  

        }  

        int netID = settingWifiAdmin.wifiManager.addNetwork(wifiConfig);  

        Log.v(TAG,"netID = "+netID);//连不加密AP总是返回-1    

        boolean bRet = settingWifiAdmin.wifiManager.enableNetwork(netID, true);  

        return bRet;  

    }  

[java] view
plaincopy





/*** 

     * 配置要连接的WIFI热点信息     

     * @param SSID 

     * @param password 

     * @param type  加密类型 

     * @return 

     */       

    public static WifiConfiguration createWifiInfo(String SSID, String password, int type) {    

          

        Log.e(TAG, "SSID = " + SSID + "## Password = " + password + "## Type = " + type);    

            

        WifiConfiguration config = new WifiConfiguration();    

        config.allowedAuthAlgorithms.clear();    

        config.allowedGroupCiphers.clear();    

        config.allowedKeyManagement.clear();    

        config.allowedPairwiseCiphers.clear();    

        config.allowedProtocols.clear();    

        config.SSID = """ + SSID + """;    

    

        //增加热点时候 如果已经存在SSID 则将SSID先删除以防止重复SSID出现  

        WifiConfiguration tempConfig = wifiAdmin.IsExsits(SSID);    

        if (tempConfig != null) {    

        settingWifiAdmin.wifiManager.removeNetwork(tempConfig.networkId);     

        }    

            

        // 分为三种情况:没有密码   用wep加密  用wpa加密    

        if (type == SECURITY_NONE) {   // WIFICIPHER_NOPASS    

            config.wepKeys[0] = "";    

            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);    

            config.wepTxKeyIndex = 0;     

                

        } else if (type == SECURITY_WEP) {  //  WIFICIPHER_WEP     

            config.hiddenSSID = true;    

            config.wepKeys[0] = """ + password + """;    

            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);    

            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);    

            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);    

            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);    

            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);    

            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);    

            config.wepTxKeyIndex = 0;    

  

        } else if (type == SECURITY_PSK) {   // WIFICIPHER_WPA    

            config.preSharedKey = """ + password + """;    

            config.hiddenSSID = true;    

            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);    

            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);    

            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);    

            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);     

            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);    

            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);    

            config.status = WifiConfiguration.Status.ENABLED;    

        }              

        return config;    

    }        

解决办法:
  if(Type == WifiCipherType.WIFICIPHER_NOPASS)<br style="margin: 0px; padding: 0px; list-style: none;" />      {<br style="margin: 0px; padding: 0px; list-style: none;" />      config.hiddenSSID = true;  <br style="margin: 0px; padding: 0px; list-style: none;" />//        config.wepKeys[0] = "";<br style="margin: 0px; padding: 0px; list-style: none;" />        config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);<br style="margin: 0px; padding: 0px; list-style: none;" />//        config.wepTxKeyIndex = 0;<br style="margin: 0px; padding: 0px; list-style: none;" />      }

把与wep有关的都注释掉就行了

3.改别人的preferenceActivity 例子时出错,见下面的错误信息:

08-04 14:37:51.287: E/AndroidRuntime(16580): FATAL EXCEPTION: main

08-04 14:37:51.287: E/AndroidRuntime(16580): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.preferenceact/com.example.preferenceact.MusicPreferenceActivity}: android.app.Fragment$InstantiationException: Unable to instantiate
fragment com.example.preferenceact.MainActivity$Prefs2Fragment: make sure class name exists, is public, and has an empty constructor that is public

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.ActivityThread.access$600(ActivityThread.java:140)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1213)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.os.Handler.dispatchMessage(Handler.java:99)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.os.Looper.loop(Looper.java:137)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.ActivityThread.main(ActivityThread.java:4914)

08-04 14:37:51.287: E/AndroidRuntime(16580): at java.lang.reflect.Method.invokeNative(Native Method)

08-04 14:37:51.287: E/AndroidRuntime(16580): at java.lang.reflect.Method.invoke(Method.java:511)

08-04 14:37:51.287: E/AndroidRuntime(16580): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:808)

08-04 14:37:51.287: E/AndroidRuntime(16580): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:575)

08-04 14:37:51.287: E/AndroidRuntime(16580): at dalvik.system.NativeStart.main(Native Method)

08-04 14:37:51.287: E/AndroidRuntime(16580): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.preferenceact.MainActivity$Prefs2Fragment: make sure class name exists, is public, and has an empty constructor that
is public

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.Fragment.instantiate(Fragment.java:588)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1174)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1190)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:580)

08-04 14:37:51.287: E/AndroidRuntime(16580): at com.example.preferenceact.MusicPreferenceActivity.onCreate(MusicPreferenceActivity.java:18)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.Activity.performCreate(Activity.java:5086)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)

08-04 14:37:51.287: E/AndroidRuntime(16580): ... 11 more

08-04 14:37:51.287: E/AndroidRuntime(16580): Caused by: java.lang.ClassNotFoundException: com.example.preferenceact.MainActivity$Prefs2Fragment

08-04 14:37:51.287: E/AndroidRuntime(16580): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)

08-04 14:37:51.287: E/AndroidRuntime(16580): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)

08-04 14:37:51.287: E/AndroidRuntime(16580): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)

08-04 14:37:51.287: E/AndroidRuntime(16580): at android.app.Fragment.instantiate(Fragment.java:574)

08-04 14:37:51.287: E/AndroidRuntime(16580): ... 18 more

结果:原来是红色部分没有改对。。

。。要改成自己的activity名字,够……

<?xml version="1.0" encoding="utf-8"?>
<preference-headers 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 指定启动指定PreferenceFragment的列表项 -->
<header android:fragment=
   "cn.com.eager.music.PreferenceActivityTest$Prefs1Fragment"
android:icon="@drawable/ic_settings_applications"
android:title="Player设置"
android:summary="设置Player的相关选项" />
</preference-headers>

4.Android
Lib Project与Android Project中R文件的区别

Android Lib Project中生产的R文件内,都不是常量。

Android Project中生产的R文件内,都是常量。

否则会报错:


As of ADT 14, resource fields cannot be used as switch cases. Invoke this fix to get more informat

所以当你的项目中有用到switch的地方,同时条件又用到了 R 中的常量时,将此project转成lib
project的话就会报错。要求你将 switch-case 换成 if-else。

5. 突然遇到eclipse的更年期到了。。。。



,死活不动,,重启无效。。。



神奇的千度,查找一下解法,发现强行关闭进程,然后把.android\ddms.cfg
删除,就神奇复活了。老太婆一下子就回到18岁美少女。





Android sdk content loader 0%的解决方案(转)

Eclipse在启动时,经常会碰到半天启动不起来的情况,罪魁祸首就是“Android sdk content loader 0%”,题主经常是受这玩意的百般折磨,大早上一来就被这扫了工作的激情,浪费了大把时间。Eclipse初始化不成功就干不了活,所以这事必须得解决。经过自己多次亲身测试,发现没有一种办法的百试百灵的,只有通过以下几种方案来一步一步地解决。


方法/步骤

方法一(关闭后重启):

    遇到Eclipse右下角一直显示“Android sdk content loader 0%”的情况时,直接关掉Eclipse,有ADB进程在运行时通过进程管理器结束进程,然后重启Eclipse。通过这种方法多数情况下问题会得到解决。

2

方法二(关闭后,拔网线再重启):

    如果用最省事的方法一不能解决问题时,拔掉网线后再重启Eclipse看看。有时候也能够得到解决。

3

方法三(删掉.android):

    关闭Eclipse,删掉C:\Users\用户名\.android文件夹下的所有内容,再重启Eclipse。

4

方法四(删掉Work Space下的.metadata\.plugins\org.eclipse.core.resources\.projects):

    关闭Eclipse,删掉Eclipse WorkSpace下.metadata\.plugins\org.eclipse.core.resources\.projects文件夹下的所有内容,再重启Eclipse。

6.
本来想把get 回来的资料解析一下。。刚好用了换行符号"\t"作为split的字符。。。结果悲剧了,,换行符号好像失踪了一样。查了一天,才发现自己使用了readline(),这个方法会把"\n",……此处省略一万字。。。把这个重新添加进去,就可以了。。Oh yeah!!!

<strong>					HttpEntity entity = httpResponse.getEntity();
if (entity != null)
{
// 读取服务器响应
BufferedReader br = new BufferedReader(
new InputStreamReader(entity.getContent()));
String line = null;

StringBuffer strBuf=new StringBuffer();
while ((line = br.readLine()) != null) {
strBuf.append(line);
</strong><span style="background-color: rgb(255, 0, 0);"><strong>strBuf.append("\n");</strong></span><strong>
}

line=strBuf.toString();

return line;
}</strong>

7.用wifi连接AP的时候,发现有时候出现错误导致APP崩溃退出 。错误信息如下:

08-29 14:50:16.969: W/System.err(27733): java.util.concurrent.ExecutionException: org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.168.1 refused

后来打印调试信息,发现连接上AP,并不代表网络就能够使用了。必须等待正确获取到IP才可以。

后来加上检查IP,就是可以正常了。整个DHCP的过程有时候用了4秒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android问题集锦