2013-10-13 4 views
0

Я хочу, чтобы отказ был придет 1-й раз после установки моего приложения! Для этого в моей MainActivity у меня есть 2 кнопки: кнопка «согласен» будет сохранять логическую «истинную» валу в общей предпочтения & перенаправит ее на u в Welcome.class! И вторая кнопка прекратит приложение! Это условие должно появиться в первый раз после установки приложения! Я не могу найти свою ошибку!?!Ошибка при обработке общих настроек?

код MainActivity.java:

public class MainActivity extends Activity implements OnClickListener  
    {public static String filename = "MySharedString"; 
SharedPreferences settings; 
Button agree,disagree; 
public static final String PREFS_NAME = "MyPrefsFile"; 

@Override 
protected void onCreate(Bundle state) 
{ 
    super.onCreate(state); 
    setContentView(R.layout.activity_main); 
    TextView text1=(TextView)findViewById(R.id.txt1); 
    TextView text2 = (TextView)findViewById(R.id.txt2); 
    text2.setText("Android custom dialog example!"); 
    ImageView image = (ImageView)findViewById(R.id.imageView1); 
    image.setImageResource(R.drawable.ic_launcher); 
    Button agreeButton = (Button)findViewById(R.id.button1); 
    Button disagreeButton = (Button)findViewById(R.id.button2); 
    agreeButton.setOnClickListener(this); 
    disagreeButton.setOnClickListener(this); 
    settings = getSharedPreferences(filename, 0); 
} 

@Override 
public void onClick(View v) 
{ 
    switch (v.getId()) 
    { 
    case R.id.button1: 
     SharedPreferences settings = getSharedPreferences(filename, 0); 
     boolean agreement = settings.getBoolean("agreement",false); 

     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean("agreement", true); 
     editor.commit(); 

     Intent i=new Intent(getApplicationContext(),Welcome.class); 
        startActivity(i); 
     break; 

     case R.id.button2: 
      finish(); 
      System.exit(0); 
     } 
    } 
} 

activity_main.xml код:

<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="#d3d3d3" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/txt1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Disclaimer" 
    android:gravity="center" 
    android:textSize="20dp" 
    android:layout_marginTop="5dp"/> 

<TextView 
    android:id="@+id/txt2" 
    android:layout_width="fill_parent" 
    android:layout_height="50dp" 
    android:text="This is a Disclaimer." 
    android:textSize="10dp" 
    android:layout_marginTop="10dp" 
    android:layout_below="@+id/txt1"/> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/button1" 
    android:layout_alignBottom="@+id/button1" 
    android:layout_marginLeft="37dp" 
    android:layout_toRightOf="@+id/button1" 
    android:text="DisAgree" /> 

<Button 
    android:id="@+id/button1" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/txt2" 
    android:layout_marginLeft="46dp" 
    android:text="Agree" /> 

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignTop="@+id/txt1" 
    android:layout_marginLeft="28dp" 
    android:src="@drawable/ic_launcher" /> 

</RelativeLayout> 

Welcome.java код:

public class Welcome extends Activity 
    { 
     @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
       setContentView(R.layout.welcome); 
      TextView iv = (TextView)findViewById(R.id.textView1); 

    } 
} 

welcome.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="WELCOME !" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

Вот код AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.disclaimer1" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.disclaimer1.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="com.example.disclaimer1.Welcome"></activity> 
</application> 

</manifest> 

LogCat:

10-13 07: 23: 30,069: Е/AndroidRuntime (3356): неустранимым: Основной 10- 13 07: 23: 30.069: E/AndroidRuntime (3356): android.content.ActivityNotFoundException: невозможно найти явный класс активности {com.example.disclaimer1/com.example.disclaimer1.Welcome}; Вы объявили эту активность в своем AndroidManifest.xml? 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1628) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.app.Instrumentation.execStartActivity (Instrumentation.java:1424) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.app.Activity.startActivityForResult (Activity.java:3390) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.app.Activity.startActivityForResult (Activity.java:3351) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.app. Activity.startActivity (Activity.java:3587) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.app.Activity.startActivity (Activity.java:3555) 10-13 07:23: 30.069: E/AndroidRuntime (3356): at com.example.disclaimer1.MainActivity.onClick (Main Activity.java:54) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.view.View.performClick (View.java:4240) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.view.View $ PerformClick.run (View.java:17721) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.os.Handler.handleCallback (Handler. java: 730) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.os.Handler.dispatchMessage (Handler.java:92) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.os.Looper.loop (Looper.java:137) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at android.app.ActivityThread.main (ActivityThread.java:5103) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at java.lang.reflect.Method.invokeNative (родной метод) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at java.lang.reflect.Method.invoke (Method.java:525) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run (ZygoteInit.java:737) 10-13 07: 23: 30.069: E/AndroidRuntime (3356): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) 10-13 07 : 23: 30.069: E/AndroidRuntime (3356): в dalvik.system.NativeStart.main (Native Method)

+0

так что происходит? –

+0

Почему вы используете getApplicationContext() для запуска активности? – Vivart

+0

Какая ошибка вы испытываете? Вы говорите, что получаете ошибку, но не говорите, что это такое. – Kuffs

ответ

1

Убедитесь, что вы объявляете вашу деятельность Добро в вашем AndroidManifest.xml файл.

Окончательный ответ

Хорошо, это не самый изящный способ сделать это, но он будет получать я начал. Впоследствии я предлагаю вам исследовать диалоги Ok/Cancel с длинным текстом и использовать один из них вместо двух действий.

MainActivity

public class MainActivity extends Activity implements OnClickListener 
{ 
    public static String filename = "MySharedString"; 
    public static final String PREFS_NAME = "MyPrefsFile"; 

@Override 
protected void onCreate(Bundle state) 
{ 
    super.onCreate(state); 
    setContentView(R.layout.main); 

    TextView text1=(TextView)findViewById(R.id.txt1); 
    TextView text2 = (TextView)findViewById(R.id.txt2); 
    text2.setText("Android custom dialog example!"); 

    ImageView image = (ImageView)findViewById(R.id.imageView1); 
    image.setImageResource(R.drawable.ic_launcher); 

    Button agreeButton = (Button)findViewById(R.id.button1); 
    Button disagreeButton = (Button)findViewById(R.id.button2); 

    agreeButton.setOnClickListener(this); 
    disagreeButton.setOnClickListener(this); 

    boolean agree = getSharedPreferences(filename, 0).getBoolean("agreement", false); 
    if(agree) 
    { 
     openWelcome(); 
    }   
} 

@Override 
public void onClick(View v) 
{ 
    switch (v.getId()) 
    { 
     case R.id.button1: 
      SharedPreferences settings = getSharedPreferences(filename, 0);    
      SharedPreferences.Editor editor = settings.edit(); 

      editor.putBoolean("agreement", true); 
      editor.commit();   

      openWelcome(); 

      break; 

     case R.id.button2: 
      finish(); 
    } 
} 

private void openWelcome() 
{ 
    Intent i=new Intent(this, Welcome.class); 
    startActivity(i); 

    finish(); 
    } 
} 
+0

Я просто объявил его в манифесте этой строкой: <активность android: name = "com.example.Welcome"> затем также отображается та же ошибка –

+0

ОШИБКА: 10-13 07: 17: 35.639: E/AndroidRuntime (3313): android.content.ActivityNotFoundException: невозможно найти явный класс активности {com.example.disclaimer1/com.example.disclaimer1.Welcome}; Вы объявили эту активность в своем AndroidManifest.xml? 10-13 07: 17: 35.639: E/AndroidRuntime (3313): \t at dalvik.system.NativeStart.main (Native Method) –

+0

также включает полное имя пакета ' –

0

Его только что сначала нужно установить значение в `Sharedpreference, а затем после того, как только вы можете получить к нему доступ.

Попробуйте, как показано ниже:

switch (v.getId()) 
    { 
    case R.id.button1: 
     //Add the value in Sharepreference 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean("agreement", true); 
     editor.commit(); 

      //Get the value from it. 
      SharedPreferences settings = getSharedPreferences(filename, 0); 
     boolean agreement = settings.getBoolean("agreement",false); 

     Intent i=new Intent(getApplicationContext(),Welcome.class); 
        startActivity(i); 
     break; 
    } 
+0

приложение работает гладко, но я хочу, чтобы после нажатия кнопки согласия я возвращаюсь и снова открываю отказ от ответственности1! там shoulg будет только приветственный экран –

0

Вы не получите значение из sharedprefs, прежде чем присвоить значение. Вы не присвоили значение переменной «соглашение», как вы можете получить от нее ценность? Это будет так;

@Override 
public void onClick(View v) 
{ 
    switch (v.getId()) 
    { 
    case R.id.button1: 
     SharedPreferences settings = getSharedPreferences(filename, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean("agreement", true); 
     editor.commit(); 

     //now you can get value of agreement 
    boolean agreement = settings.getBoolean("agreement",false); 


     Intent i=new Intent(getApplicationContext(),Welcome.class); 
        startActivity(i); 
     break; 

     case R.id.button2: 
      finish(); 
      System.exit(0); 
     } 
    } 
} 
+0

ОК, приложение работает гладко, но я хочу, чтобы после нажатия кнопки согласия я возвращаюсь и снова открываю disclaimer1! должен быть только приветственный экран –

Смежные вопросы