簡體   English   中英

與Volley聯網

[英]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.

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