2013-10-13 46 views
0

我希望在安装我的应用程序后首次发布免责声明! 对于在我的MainActivity中,我做了2个按钮:第一个'同意'按钮将存储共享首选项&布尔'真'瓦尔将它重定向到你在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日:23:30.069:E/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):在android.app.Activity.startActivityForResult(Activity.java:3351) 10-13 07:23:30.069:E/AndroidRuntime(3356):在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):在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):在java.lang.reflect.Method.invokeNative(Native Method) 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(本机方法)

+0

所以现在最新情况如何? –

+0

你为什么使用getApplicationContext()来开始活动? – Vivart

+0

您遇到的错误是什么?你说你得到错误,但不要说它是什么。 – Kuffs

回答

1

确保您在AndroidManifest.xml中文件声明你欢迎活动。

最终答案

好吧,这是不是最优雅的方式来做到这一点,但它会获得亚开始。之后,我建议你使用长文本调查确定/取消对话框,并使用其中一个而不是两个活动。

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

雅我刚刚声明它清单中的这一行: 然后它也显示相同的错误 –

+0

错误:10-13 07:17:35.639:E/AndroidRuntime(3313):android.content.ActivityNotFoundException:无法找到显式活动类{com.example.disclaimer1/com.example.disclaimer1.Welcome};你有没有在你的AndroidManifest.xml中声明这个活动? 7月10日至13日:17:35.639:E/AndroidRuntime(3313):\t在dalvik.system.NativeStart.main(本机方法) –

+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

该应用程序运行平稳,但我希望点击同意按钮后,我回去再次打开disclaimer1!那里只有欢迎屏幕 –

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!应该只有欢迎屏幕 –