簡體   English   中英

如何使其等到函數返回? 安卓系統

[英]How do I make it wait until a function has returned? Android

抱歉,僅轉儲代碼,但是我正在嘗試制作菜單。 當您啟動程序時,它只會顯示“很遺憾,ScoutingDraft已停止工作。” 我不知道問題所在。

package cody.graham.scoutingdraft;

import...;

public class MyMenu extends ListActivity{
    String UserName="a";
    String display[] = {"Welcome" ,"Login"  ,"Exit"    };
    String classes[] = {"return()","login()","finish()"};
    EditText user=(EditText) findViewById(R.id.ETUserInput);
    Button login=(Button) findViewById(R.id.BLogin),logout=(Button) findViewById(R.id.BLogout);
    TextView errmsg=(TextView) findViewById(R.id.TVErrorReport);
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(MyMenu.this,android.R.layout.simple_list_item_1,display));
    }
    @Override public void onBackPressed(){finish();}
    @Override
    protected void onListItemClick(ListView l, View v, int position,long id)
    {
        super.onListItemClick(l, v, position, id);
        if (classes[position].equals("return()")){return;}
        if (classes[position].equals("finish()")){finish();return;}
        if (classes[position].equals("login()")){
            final Dialog logd=new Dialog(this);
            logd.setContentView(R.layout.login_dialog);
            logd.setCancelable(false);
            login.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    int len=user.getText().toString().length();
                    if (len<3){errmsg.setText("Too short"); return;}
                    if (len>10){errmsg.setText("Too long"); return;}
                    UserName=user.getText().toString();
                    display[1]="Welcome, "+UserName;
                    display[2]="Logout";
                    logd.dismiss();
                }
            });
            logout.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    UserName="a";
                    display[1]="Welcome";
                    display[2]="Login";
                    logd.dismiss();
                }
            });
            logd.show();
            return;
        }
        try{
            Class<?> cvar=Class.forName("cody.graham.scoutingdraft."+classes[position]);
            Intent intention=new Intent(MyMenu.this,cvar);
            startActivity(intention);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
    }
    public String getUser(){
        return UserName;
    }
    public void setUser(String newuser){
        UserName=newuser;
    }
}

我還沒有任何其他Java文件(到目前為止,這是整個程序),但是我給它提供的唯一選項應該觸發3個if語句之一,並在嘗試創建類之前返回。 即使這不是真的,也應該在我單擊某些內容之前使其崩潰。

LogCat:

11-12 17:24:45.925: I/ActivityManager(165): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=cody.graham.scoutingdraft/.MyMenu bnds=[0,405][120,555] u=0} from pid 263
11-12 17:24:45.956: W/WindowManager(165): Failure taking screenshot for (246x410) to layer 21005
11-12 17:24:45.975: E/PowerManagerService(165): Excessive delay setting brightness: 140ms, mask=2
11-12 17:24:46.137: D/dalvikvm(6708): Not late-enabling CheckJNI (already on)
11-12 17:24:46.155: I/ActivityManager(165): Start proc cody.graham.scoutingdraft for activity cody.graham.scoutingdraft/.MyMenu: pid=6708 uid=10047 gids={1028}
11-12 17:24:46.235: E/PowerManagerService(165): Excessive delay setting brightness: 259ms, mask=2
11-12 17:24:46.525: E/PowerManagerService(165): Excessive delay setting brightness: 266ms, mask=2
11-12 17:24:46.606: I/Choreographer(165): Skipped 31 frames!  The application may be doing too much work on its main thread.
11-12 17:24:46.708: E/PowerManagerService(165): Excessive delay setting brightness: 176ms, mask=2
11-12 17:24:47.005: E/PowerManagerService(165): Excessive delay setting brightness: 284ms, mask=2
11-12 17:24:47.146: E/Trace(6708): error opening trace file: No such file or directory (2)
11-12 17:24:47.656: D/AndroidRuntime(6708): Shutting down VM
11-12 17:24:47.656: W/dalvikvm(6708): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
11-12 17:24:47.686: E/AndroidRuntime(6708): FATAL EXCEPTION: main
11-12 17:24:47.686: E/AndroidRuntime(6708): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{cody.graham.scoutingdraft/cody.graham.scoutingdraft.MyMenu}: java.lang.NullPointerException
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.os.Looper.loop(Looper.java:137)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.app.ActivityThread.main(ActivityThread.java:4745)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at java.lang.reflect.Method.invokeNative(Native Method)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at java.lang.reflect.Method.invoke(Method.java:511)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at dalvik.system.NativeStart.main(Native Method)
11-12 17:24:47.686: E/AndroidRuntime(6708): Caused by: java.lang.NullPointerException
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.app.Activity.findViewById(Activity.java:1825)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at cody.graham.scoutingdraft.MyMenu.<init>(MyMenu.java:18)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at java.lang.Class.newInstanceImpl(Native Method)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at java.lang.Class.newInstance(Class.java:1319)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
11-12 17:24:47.686: E/AndroidRuntime(6708):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
11-12 17:24:47.686: E/AndroidRuntime(6708):     ... 11 more
11-12 17:24:47.716: W/ActivityManager(165):   Force finishing activity cody.graham.scoutingdraft/.MyMenu
11-12 17:24:47.726: W/WindowManager(165): Failure taking screenshot for (246x410) to layer 21010
11-12 17:24:48.266: W/ActivityManager(165): Activity pause timeout for ActivityRecord{41980720 cody.graham.scoutingdraft/.MyMenu}

看來您收到了null pointer exception這是由第18行的一個視圖引起的。

這是導致您的問題的行:

setListAdapter(new ArrayAdapter<String>(MyMenu.this,android.R.layout.simple_list_item_1,display));

嘗試:

setListAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1,display));

原來我需要刪除

    EditText user=(EditText) findViewById(R.id.ETUserInput);
    Button login=(Button) findViewById(R.id.BLogin),logout=(Button) findViewById(R.id.BLogout);
    TextView errmsg=(TextView) findViewById(R.id.TVErrorReport);

從頂部將它們全部更改為最終變量,然后在if語句中全部移動:

        if (classes[position].equals("login()")){

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM