[英]Networking with Volley
請幫我解決我在這里嘗試的網絡請求。
我有2類Network.class和MainActivity.class。 我在MainActivity類中有一個TextView,我希望將其替換為從網絡類的網絡調用中獲得的文本。 我當前遇到的問題是,在應用程序啟動時加載MainActivity類時,無法在網絡類中發起網絡調用嗎?
以下是MainActivity的代碼:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView)findViewById(R.id.text);
String test = Network.userName;
tv.setText(test);
}
}
下面是我要進行網絡調用的網絡類,響應將需要替換MainActivity類中TextView中的文本。
網絡類別:
public class Network extends Activity{
public static String userName;
private String jsonResponse;
String url_home = "http://www.someurl.com";
private void postData(final TextView tv) {
final RequestQueue request = Volley.newRequestQueue(this);
JsonObjectRequest postReq = new JsonObjectRequest(Request.Method.GET, url_home, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
jsonResponse = "";
for(int i = 0; i< response.length(); i++) {
String userName = response.getString("DOTWBannerHD");
System.out.println("++++++++++++++++++++++++++++++++++++++++++++userName = " + userName);
jsonResponse += userName;
System.out.println("++++++++++++++++++++++++++++++++++++++++++++JsonResponse = " + jsonResponse);
}
tv.setText(jsonResponse);
} catch (JSONException e){
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("Error [" + error + "]");
}
}) {
@Override
public Map getHeaders() throws AuthFailureError {
Map headers = new HashMap();
headers.put("Accept", "application/json");
System.out.println(headers);
return headers;
}
};
request.add(postReq);
}
}
我是Android的新手,正在努力在MainActivity的第二個活動中調用postData方法? 我得到的問題是TextView在XML中使用硬編碼的文本,但是當我運行應用程序時,它是空白的? 就像是,響應還是空白,但我對此表示懷疑,因為我在網絡類(System.out.println(“ +++++++++++++++++++++ +++++++++++++++++++++++++++ userName =“ + userName);)沒有顯示在終端中,這使我認為它沒有運行postData方法根本不起作用,或者響應不起作用,但是它只是將TextView設置為空白?
您不能從異步任務更改GUI。 由於JsonObjectRequest
異步工作,因此您應該運行tv.setText(jsonResponse);
在主線程上使用:
runOnUiThread(new Runnable() {
public void run() {
tv.setText(jsonResponse);
}
});
根據我的評論,您在終端中看不到任何內容的原因是因為您沒有調用postData方法,所以它從未執行。
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView)findViewById(R.id.text);
Network network = new Network();
network.postData(tv);
}
}
使Network成為普通班而不是Activity。
public class Network{
////The variables and your postData method here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.