我正在尝试进入Android编程,因为我从一本书中拿了一些例子.在这些示例中要求输入以下代码:
public class ExemploCicloVida extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.i(TAG, getClassName() + " onCreate() called on: " + icicle);
TextView t = new TextView(this);
t.setText("Exemplo de ciclo de vida de uma Activity.\nConsulte os logs no LogCat");
setContentView(t);
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么Bundle对象在这种情况下总是为null.
我只能在onCreate方法中设置我的活动到全屏(在setContentView之前)?
有没有什么方法可以在onCreate之外设置为全屏?
谢谢
我最近尝试使用StrictMode但有一个奇怪的侵犯,所以我尝试建立一个新的 "空活动"项目(在Android Studio),并添加如下(中记载的应用程序类在这里):
public class TestApplication extends Application {
@Override
public void onCreate() {
setStrictMode();
super.onCreate();
}
private void setStrictMode() {
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在这个空项目中遇到同样的问题:
StrictMode policy violation; ~duration=165 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=65599 violation=2
堆:
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1440)
at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:241)
at java.io.File.isDirectory(File.java:837)
at dalvik.system.DexPathList$Element.toString(DexPathList.java:634)
at java.lang.String.valueOf(String.java:2827)
at java.util.Arrays.toString(Arrays.java:4511)
at dalvik.system.DexPathList.toString(DexPathList.java:194)
at java.lang.String.valueOf(String.java:2827)
at java.lang.StringBuilder.append(StringBuilder.java:132)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:126)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.view.LayoutInflater.createView(LayoutInflater.java:606) …Run Code Online (Sandbox Code Playgroud) 我昨天发布了一个 Android 应用程序的更新,今天我在 Crashlytics 中看到了一些崩溃日志:
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.MyWebViewActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.example.myapp.MyWebViewActivity.onCreate(MyWebViewActivity.java:77)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at …Run Code Online (Sandbox Code Playgroud) 我的Android应用程序上有一些错误报告,它是一个活动中onCreate()的Nullpointerexception. 失败的代码是getIntent().getExtras().getStringExtra("name").(空指针异常)
这意味着getExtras()以某种方式为null.我确信我在创建意图的每个地方都设置了额外的意图.我无法在设备上的模拟器上重新创建它.在我尝试再次打开应用程序之后,我认为它发生在我的真实设备上(但不是在我调试时),同时Android可能会杀死进程并再次重新创建活动.但是,即使在这种情况下,也不应该保留额外的意图吗?
我试图在模拟器上终止进程,再次调用onCreate并且getExtras()返回正确的值.
我用getIntent().getStringExtra()替换了代码.除了它之外还有什么区别不会抛出nullpointerexception,但仍会将String设置为null.还有其他区别吗?
可能是什么原因造成的?
我的Android应用需要用户创建一个帐户才能使用该应用.帐户信息存储在SQLite数据库中.当应用程序启动时,我会检查用户是否有帐户,如果没有,我会为用户显示注册活动.
现在,我收到用户的报告,即使他们已经创建了帐户,他们有时也会参与注册活动.当他们关闭应用程序并再次重新打开它时会发生这种情况.
这是我正在使用的代码,我需要弄清楚问题可能是什么:
//MyApplication.java
public class MyApplication extends Application {
private DataBaseUtility dbu;
public boolean hasAccount;
@Override
public void onCreate() {
super.onCreate();
//Init sqlite database
this.dbu = new DataBaseUtility(this);
//This loads the account data from the database and returns true if the user has already created an account
this.hasAccount = loadAccount();
}
public boolean loadAccount() {
boolean loadedData = false;
String query = "SELECT data FROM tblaccount WHERE tblaccount.deleted=0";
Cursor cursor = this.dbu.getCursor(query);
if (cursor != null) {
while (cursor.moveToNext()) …Run Code Online (Sandbox Code Playgroud) 在Android(目标API 14-16)中,我有一个MainActivity和一个NextActivity.如果在块内部调用方法,则使用Intent NextActivity从内部开始是没有困难的:MainActivitygetIntent()onCreate()NextActivity
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int data = 7;
...
Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("data", data);
startActivity(intent);
}
}
public class NextActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final int data = this.getIntent().getIntExtra("data", 7);
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是,由于该字段data在匿名("内部")类中使用NextActivity,我被迫声明它final.
我不想声明字段final,如果我在开始之前在类的开头声明它们,我通常可以避免这样做onCreate().但由于某种原因,NextActivity如果getIntent()语句出现(没有 …
我还是Android编程的新手,所以这个问题很基础.我在Internet上看到许多代码示例,其中UI组件(如a TextView)正在初始化并在onCreate()Activity 的方法中访问.
当我使用Android Studio来创建一个新的项目- FirstApp-使用默认设置,一个空白的活动叫做MainActivity带来与它一起activity_main和fragment_main,我可以马上编译此为APK,部署我的设备上,我也得到一个屏幕,标题" FirstApp"和左上角的TextView显示"Hello world!".
如果我给出TextView一个ID textview1,并创建一个成员变量,TextView myTextView;那么我可以onCreate()在Activity 的方法中引用它,就像这样(当然没有编译器错误):
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
myTextView = (TextView) findViewById (R.id.textview1);
myTextView.setText ("Hello tablet!");
if (savedInstanceState == null)
{
getSupportFragmentManager().beginTransaction().add (R.id.container,new PlaceholderFragment()).commit();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我编译并运行APK,则会导致"不幸的是,FirstApp已停止".信息.
我以前通过将访问UI组件的启动代码移动到onStart()Activity 的方法中解决了这个问题,如下所示:
@Override
protected void onStart()
{
super.onStart();
myTextView = (TextView) findViewById (R.id.textview1);
myTextView.setText ("Hello tablet!");
}
Run Code Online (Sandbox Code Playgroud)
这将导致一个工作的APK在左上角显示一个单独的TextView显示"Hello平板电脑!" - …
我的Android应用程序有一个SQLite数据库和一个内容提供程序.此内容提供商已在应用程序中注册AndroidManifest.xml.它不会导出,所以只有我的应用才能看到它.
作为重置用户配置文件的一部分,我想彻底擦除此数据库并从头开始重新创建它.起初我尝试deleteDatabase()从活动的上下文中调用.这有效,但仅在应用程序关闭后重新打开.否则,当我尝试插入表示数据库是只读的行时,它将崩溃.我的理解是在呼叫之前需要先关闭连接deleteDatabase().然而,据我所知,连接由内容提供商管理,不应手动关闭.
作为替代方案,我使用调用自定义函数的call()方法来ContentResolver删除表中的所有数据并手动重置序列计数.
这是有效的,但现在我必须手动删除每个表中的数据,并且必须跟踪我将来做出的任何更改.
是否有更好的方法来删除整个数据库并在使用时使用onCreate()my DatabaseHelper(SQLiteOpenHelper)触发器ContentProvider?
我的调试方法中有一系列Log语句onCreate(),但有时它们不会打印在我的方法中LogCat.有没有人知道的任何理由?
也许我误解了活动生命周期的基础知识.我访问了开发人员的页面,但它仍然没有意义.
让我澄清一下,Log如果我卸载应用程序然后再次从Eclipse启动它,则会显示调用.但是,我正在运行测试,以便在应用程序功能运行后查看它们.
我有一个MainMenu活动,它源于多个其他活动.当我卸载应用程序并重新启动它时,它会打印出我希望打印的内容.然后,我转到我的设备的设置和Force Quit应用程序(这是正确的事情吗?).之后,我再次打开我的应用程序.该方法没有Log消息onCreate(),但是当我移动到另一个Activity时,我MainMenu的方法onPause()和onStop()方法都有Log正确打印到LogCat的消息.
有任何想法吗?
编辑:
我想在重新启动时添加它,也会跳过方法中的Log消息onStart().
如果您有兴趣,这是我的onCreate/onStart/onPause/onStop方法.内部有很多重复的代码,试图找出重新启动应用程序时调用的方法.虽然不应该有所作为,我觉得这是我的重启应用程序的方法的问题.
public void onCreate(Bundle savedInstanceState) {
// This calls all inherited methods, as this is a subclass of Activity.
super.onCreate(savedInstanceState);
if(D) Log.e(TAG, "+++ ON CREATE +++");
Log.i( TAG, "Whats going onnnn" );
// Set the view the main.xml
setContentView(R.layout.main);
RelayAPIModel.bluetoothConnected = false;
// Initialize …Run Code Online (Sandbox Code Playgroud)