2014-09-22 53 views
0

我需要從getJobs GET請求onSuccess方法存儲值jobs變量:Android異步HTTP庫:如何從onSuccess方法存儲值?

private static JSONArray jobs = null; 
    ... 
    ... 
public static JSONArray getJobs(String url) throws JSONException { 
    final JSONArray[] testArray = {null}; 
    RestClient.get(url, null, new JsonHttpResponseHandler() { 
     @Override 
     public void onSuccess(int statusCode, Header[] headers, JSONObject response) { 
      try { 
       testArray[0] = response.getJSONObject("jobs").getJSONArray("values"); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    return testArray[0]; 

當我把它叫做

try { 
    jobs = getJobs(JOBS_SEARCH_URL); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

我得到一個錯誤。因此,正如我在某種原因,瞭解它並沒有達到工作變量,並沒有將它存儲有...

09-22 01:06:17.364 25310-25310/*my_package* E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: *my_package*, PID: 25310 
    java.lang.RuntimeException: Unable to start activity ComponentInfo*my_package*/*my_package*.JobsActivity}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641) 
      at android.app.ActivityThread.access$800(ActivityThread.java:156) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:157) 
      at android.app.ActivityThread.main(ActivityThread.java:5867) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at *my_package*.JobsActivity.getCompanyNames(JobsActivity.java:126) 
      at *my_package*.JobsActivity.onCreate(JobsActivity.java:94) 
      at android.app.Activity.performCreate(Activity.java:5312) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2541) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641) 
            at android.app.ActivityThread.access$800(ActivityThread.java:156) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:157) 
            at android.app.ActivityThread.main(ActivityThread.java:5867) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674) 
            at dalvik.system.NativeStart.main(Native Method) 

PS:什麼是存儲GET請求的響應的好方法,如果onSuccess方法是void

+0

所以我認爲有在我的代碼有毛病範圍。 – 2014-09-22 08:26:43

回答

1

因爲RestClient.get是異步的,所以getJobs的func不能直接返回值。

如果你想在onSuccess之後做點什麼。

你可以像這樣的代碼:

public static void getJobs(String url) throws JSONException { 
    RestClient.get(url, null, new JsonHttpResponseHandler() { 
    @Override 
    public void onSuccess(int statusCode, Header[] headers, JSONObject response) { 
     try { 
     JobsActivity.jobs = response.getJSONObject("jobs").getJSONArray("values"); 

     //store the values. 
     storeJobs(JobsActivity.jobs); 

     } catch (JSONException e) { 
     e.printStackTrace(); 
     } 
    } 
    }); 
} 
+0

非常感謝您的幫助!店面做什麼?我的意思是它如何存儲價值? – 2014-09-22 08:55:36

+0

對不起,我不是一個android開發人員。我不知道如何存儲在Android系統上的價值。可能在storeJobs中,您可以編寫File或其他文件。 – Philip 2014-09-22 09:00:01

+0

噢,我的意思是在調用請求後存儲爲變量以供使用... – 2014-09-22 09:01:23