2016-02-27 67 views
0
String name; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getData(); 
    this.setText(name); 
} 
private void getData(){ 
    name = object.getString("name"); 
} 

我只是將我的代碼行縮短了,無論如何,這個想法已經存在了。所以在方法getData()我從網上檢索數據。我能夠測試並能夠得到結果,但是當我把名稱放在onCreate()上時,它給了我一個空值。如何解決這個問題呢?當試圖從方法中檢索數據時,變量返回null

public class Testing extends NavigationLiveo{ 
String name; 

@Override 
public void onInt(Bundle savedInstanceState) { 
    getData(); 
    Log.wtf("name0", name); 
    this.username.setText(name); 
} 
private void getData() { 
    RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); 
    StringRequest sr = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String s) { 
      try { 
       name = object.getString("name"); 
       Log.wtf("name1", name); 
      } catch (Exception e) { 
       Log.wtf("testing1", e.getMessage()); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError volleyError) { 

     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String,String> params = new HashMap<String, String>(); 
      params.put("user", user_pid); 
      return params; 
     } 
    };queue.add(sr); 
} 
} 

再次,我讓我的編碼變得簡單。我真的可以從Web服務器獲取數據。只是,只要我嘗試訪問onInt(Bundle savedInstanceState)上的名稱,它就會返回一個空值。日誌也說明了這一點。 「name1」返回一個值,而「name0」返回null。

+0

在Log object.getString(「name」);中打印此值。有一個機會,這將從網絡 – Amsheer

+0

顯示你的所有代碼爲空。您需要等待數據從webserives返回。然後設置它。 –

+0

@Amsheer日誌「name1」將顯示在Web上檢索的數據,但在日誌「name0」上它將顯示爲空。 – fmpsagara

回答

0

你可以把getData()的代碼?
我認爲,因爲該方法使用AsyncTask左右從URL異步下載數據。這意味着該方法尚未完成下載,setText(name)代碼已經執行。所以它顯示null

+0

我100%確定它從網絡獲得結果。順便說一下,我使用抽象而不是AsyncTask。只是從方法中檢索的值保留在方法中。我將發佈代碼 – fmpsagara

+0

Hi Volley也是異步的,所以你應該在你的請求的'onResponse(String response)'方法中寫這個'this.setText(name);'來獲得它在請求完成後執行。 –

+0

是的,這正是我想的,但'this.username.setText()'只能在onInt(Bundle bundle)中使用。順便說一句,我正在使用圖書館。 – fmpsagara

0

唯一的解釋是object.getString("name")返回null,或者您將其設置爲null之後的某處。順便說一下,當從網絡中檢索數據時,您應該使用AsyncTask,以獲取更多詳細信息refer here

+0

我100%肯定它從網絡獲得結果。順便說一句我使用的是抽象而不是AsyncTask,它只是從方法中檢索到的值保留在方法中,我將發佈代碼 – fmpsagara

相關問題