0

好吧,我一直在研究Android應用程序一段時間。它基本上是一個RSS接收器。我使用RSS來檢查新聞,天氣預報,電視節目表和星座運勢。Android應用程序工作在2.3但不在4.0

當我在Android 2.3.3,2.3.6甚至2.1上測試時,一切都很好;但是當我將它發送給擁有Android 4.0的朋友時,它不起作用。我很懷疑,所以我在模擬器上測試了它。也不4.0或4.1仿真器可以運行它。在這裏,我提供了Manifest和一個班級。如果有人知道如何解決這個問題,那會很好。

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="XXX.XXXXX.XXX" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="14" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".Vodic" 
     android:label="@string/title_activity_pocetna" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".Pomoc" 
     android:label="@string/m_tel_vodi_za_odlu_ne" 
     ></activity> 
    <activity 
     android:name=".Pomocna" 
     android:label="@string/m_tel_vodi_za_odlu_ne" 
     ></activity> 
    . 
    . 
    . 

    <activity 
     android:name=".TvRasporedTreca" 
     android:label="@string/m_tel_vodi_za_odlu_ne" 
     ></activity> 

</application> 

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

<!-- Needed to check when the network connection changes --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

</manifest> 

而這裏的一類:

public class Vodic extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_pocetna); 
    Button tv = (Button)findViewById(R.id.tv); 
    Button vijesti = (Button)findViewById(R.id.vijesti); 
    Button horoskop = (Button)findViewById(R.id.horoskop); 
    Button vremenska_prognoza = (Button)findViewById(R.id.vremenska_prognoza); 
    Button o_aplikaciji = (Button)findViewById(R.id.o_aplikaciji); 
    Button pomoc = (Button)findViewById(R.id.pomoc); 

    tv.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Intent fy=new Intent(getApplicationContext(), TV_Raspored.class); 
      startActivity(fy); 
     } 
    }); 

    . 
    . 
    . 

    pomoc.setOnClickListener(new View.OnClickListener() { 
     @Override 
    public void onClick(View arg0) { 
      Intent fy=new Intent(getApplicationContext(), Pomoc.class); 
      startActivity(fy); 
     } 
    }); 

} 

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if(netInfo != null && netInfo.isConnected()) { 
     return true; 
    } 
    return false; 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_pocetna, menu); 
    return true; 
} 
} 

所以,總結一下。它適用於2.1和2.3.3,但不適用於4.0和4.1。我不知道什麼是錯的..所以如果有人知道,請幫助..

+1

您能否提供更多信息?有沒有可以提供的logcat?你看到什麼錯誤?它安裝失敗嗎?第一次運行時是否會崩潰? –

+0

它被安裝嗎?你在logcat中看到任何錯誤嗎? –

+0

「它不工作」?這甚至意味着什麼? – njzk2

回答

1

從Android 3.x和谷歌已添加一些檢查,如果您的應用程序使用非常不好的做法會產生錯誤。
如果沒有日誌,很難確認,但最可能的情況是您在活動的核心中進行網絡操作,生成NetworkOnUIThread異常。
它不是Android框架中的錯誤。問題在於你的活動在主線程中運行,即UI線程。
因此,當您在活動中進行網絡通話時,整個用戶界面將凍結,直到您獲得答案(或超時);這是你絕對想要避免的。 這個問題的一個簡單的解決方案是使用AsyncTask:這是一個很容易實現的內置解決方案在輔助線程中進行操作。

+0

嘿,謝謝你的迴應。請看看這個:[http://stackoverflow.com/questions/12963646/android-app-cant-start-on-android-4-0](http://stackoverflow.com/questions/12963646/android-app -cant-start-on-android-4-0)...我在這個問題中增加了更多信息。日誌和更多類 – Igx33

相關問題