2012-06-21 96 views
0

我正在嘗試設置名爲「GetIntents」的Intent幫助程序類。我的問題是,我將如何從活動中調用GetIntents助手類?getIntent幫助程序類

這裏是我GetIntents輔助類:

public class GetIntents extends Intent { 

public static Intent i; 

public static String username = i.getExtras().getString("uid"); 
public static String password = i.getExtras().getString("pwd"); 
public static String firstName = i.getExtras().getString("firstName"); 
public static String lastName = i.getExtras().getString("lastName"); 
public static String lastLatitudeUpdate = i.getExtras().getString("lastLatitudeUpdate"); 

public static int checkedin = i.getExtras().getInt("checkedin"); 
public static int Minute = i.getExtras().getInt("Minute"); 
public static int Hour = i.getExtras().getInt("Hour"); 

} 

現在林不知道我怎麼會能夠從我的活動調用它。到目前爲止,我已經嘗試過:

GetIntents intent = new GetIntents(); 
intent.getIntent(); 

我也嘗試了其他方法,但沒有運氣。有什麼我可以嘗試的建議嗎?

我的日誌:

06-21 11:26:18.249: D/AndroidRuntime(8978): Shutting down VM 

06-21 11:26:18.249: W/dalvikvm(8978): threadid=1: thread exiting with uncaught exception (group=0x40015578) 
06-21 11:26:18.253: E/AndroidRuntime(8978): FATAL EXCEPTION: main 
06-21 11:26:18.253: E/AndroidRuntime(8978): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.jetdelivery.mobile/com.jetdelivery.mobile.screen1}: java.lang.NullPointerException 
06-21 11:26:18.253: E/AndroidRuntime(8978): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1573) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at android.os.Looper.loop(Looper.java:130) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at android.app.ActivityThread.main(ActivityThread.java:3687) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at java.lang.reflect.Method.invokeNative(Native Method) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at java.lang.reflect.Method.invoke(Method.java:507) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
    06-21 11:26:18.253: E/AndroidRuntime(8978): at dalvik.system.NativeStart.main(Native Method) 
06-21 11:26:18.253: E/AndroidRuntime(8978): Caused by: java.lang.NullPointerException 
06-21 11:26:18.253: E/AndroidRuntime(8978): at com.jetdelivery.mobile.GetIntentHelper.getDataModel(GetIntentHelper.java:9) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at com.jetdelivery.mobile.screen1.<init>(screen1.java:66) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at java.lang.Class.newInstanceImpl(Native Method) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at java.lang.Class.newInstance(Class.java:1409) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
06-21 11:26:18.253: E/AndroidRuntime(8978): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565) 
06-21 11:26:18.253: E/AndroidRuntime(8978): ... 11 more 

回答

0

謝謝大家的幫助。我決定走另一條路線,而不是使用助手類。

Intent i = getIntent(); 
username = i.getExtras().getString("uid"); 
password = i.getExtras().getString("pwd"); 
firstName = i.getExtras().getString("firstName"); 
lastName = i.getExtras().getString("lastName"); 
lastLatitudeUpdate = i.getExtras().getString("lastLatitudeUpdate"); 
checkedin = i.getExtras().getInt("checkedin"); 
Minute = i.getExtras().getInt("Minute"); 
Hour = i.getExtras().getInt("Hour"); 
1

你可以做到這一點的幾種方法。 你的GetIntent類應該只是一堆靜態方法的包裝。 和你的函數調用看起來像

String username = GetIntent.getUsername(intent); 

或者當你創建類

GetIntent mIntent = new GetIntent(getIntent()); 

無論哪種方式,你還是得通過一個Intent可以在意圖傳遞,你贏了」除非這是一個內部類,否則可以將這些值靜態地分配給您的成員函數。但是,如果你這樣做,而不是爲什麼即使有班級,當你可以使用我們的變量。

+0

我得到廣大你說的話(對不起,仍在學習),所以你說的話,它的種類多餘的,如果我是在一個輔助類中使用靜態的,而是使用靜態的內部類,所以我可以隨時撥打它嗎? –

+0

我想你可能會倒退。首先你有兩個選擇,靜態方法或不。如果你使用靜態方法,那麼你不需要創建你的類的一個實例。作爲一個副作用,由於方法是靜態的,它們不會有一個意圖實例(這就是爲什麼你需要給它一個)。另一條路線是爲了讓你的班級更新,並將其傳遞給他人。然後,使用變量進行方法調用以獲取想要的信息。這些方法只會根據您在新建它時提供的意圖進行getExtra()操作。 –

+0

謝謝你清除弗蘭克!我已經決定只走另一條路線,而不是爲我的意圖使用輔助類。 –

1

你有點關閉。

創建一個名爲DataModel的一個Java類,像這樣:

public class DataModel { 
     public String getUsername() { 
      return username; 
     } 

     public void setUsername(String username) { 
      this.username = username; 
     } 

     public String getPassword() { 
      return password; 
     } 

     public void setPassword(String password) { 
      this.password = password; 
     } 

     public String getFirstName() { 
      return firstName; 
     } 

     public void setFirstName(String firstName) { 
      this.firstName = firstName; 
     } 

     public String getLastName() { 
      return lastName; 
     } 

     public void setLastName(String lastName) { 
      this.lastName = lastName; 
     } 

     public String getLastLatitudeUpdate() { 
      return lastLatitudeUpdate; 
     } 

     public void setLastLatitudeUpdate(String lastLatitudeUpdate) { 
      this.lastLatitudeUpdate = lastLatitudeUpdate; 
     } 

     public int getCheckedin() { 
      return checkedin; 
     } 

     public void setCheckedin(int checkedin) { 
      this.checkedin = checkedin; 
     } 

     public int getMinute() { 
      return Minute; 
     } 

     public void setMinute(int minute) { 
      Minute = minute; 
     } 

     public int getHour() { 
      return Hour; 
     } 

     public void setHour(int hour) { 
      Hour = hour; 
     } 

     private String username; 
     private String password; 
     private String firstName; 
     private String lastName; 
     private String lastLatitudeUpdate; 

     private int checkedin; 
     private int Minute; 
     private int Hour; 
    } 

然後創建另一個類叫做GetIntentHelper,像這樣

public class GetIntentHelper { 

    public static DataModel getDataModel(Intent i) { 
     DataModel m = new DataModel(); 
     m.setUsername(i.getExtras().getString("uid")); 
     m.setPassword(i.getExtras().getString("pwd")); 
     m.setFirstName(i.getExtras().getString("firstName")); 
     m.setLastName(i.getExtras().getString("lastName")); 
     m.setLastLatitudeUpdate(i.getExtras().getString("lastLatitudeUpdate")); 

     m.setCheckedin(i.getExtras().getInt("checkedin")); 
     m.setMinute(i.getExtras().getInt("Minute")); 
     m.setHour(i.getExtras().getInt("Hour")); 

     return m; 
    } 
} 

至於使用情況,在您的活動,請致電:

DataModel mydata = GetIntentHelper.getDataModel(myIntent); 

這將返回一個名爲mydata的DataModel實例,其中的數據都非常漂亮整齊或者你玩。

+0

我試過你的建議,我正在接近一個部隊。我現在把日誌貼出來,以便你可以看到它。另外,感謝您花時間幫助我。 –