gpt4 book ai didi

java - 与 Volley 建立联系

转载 作者:行者123 更新时间:2023-12-01 11:31:36 25 4
gpt4 key购买 nike

请您帮我解决我在这里尝试的网络请求。

我有 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 中的第二个 Activity 调用 postData 方法?我遇到的问题是 TextView 在 XML 中硬编码了文本,但是当我运行应用程序时它是空白的?就像,要么响应是空白,但我对此表示怀疑,因为我放入网络类中的代码 (System.out.println("++++++++++++++++++++++++++++++++++++++++++++++userName = "+ userName);) 没有显示在终端中,这让我认为它没有运行postData 方法根本不起作用,或者响应不起作用,但它只是将 TextView 设置为空白?

最佳答案

您无法从异步任务更改 GUI。由于 JsonObjectRequest 异步工作,您应该使用以下命令在主线程上运行 tv.setText(jsonResponse);:

runOnUiThread(new Runnable() {
public void run() {
tv.setText(jsonResponse);
}
});

关于java - 与 Volley 建立联系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30342502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com