如何使用Volley访问JSON对象?API响应赋值UUID到TextView无效求代码
问题:Volley解析JSON设置UUID到TextView无效果,求完整可行代码
嘿,我来帮你搞定这个问题!首先我注意到你提供的API响应JSON有个语法错误——data字段后面缺少了冒号,这会直接导致JSON解析失败,正确的响应格式应该是这样的:
{ "success":true, "data": { "serial_key_id":"75", "order_id":"0", "product_id":"0", "serial_key":"WURYFO", "valid_till":null, "limit":"0", "uuid":"", "used":false } }
你的部分代码没写完,我给你一套完整的可行代码,包含所有必要步骤,确保能正确请求API、解析JSON并把uuid设置到TextView中:
第一步:添加Volley依赖
先确保你已经在Module级别的build.gradle文件中添加了Volley的依赖:
dependencies { // 其他已有的依赖... implementation 'com.android.volley:volley:1.2.1' }
第二步:完整的Activity代码
import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.Volley; import org.json.JSONException; import org.json.JSONObject; public class MainActivity extends AppCompatActivity { private TextView uuidTextView; private RequestQueue requestQueue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化要显示UUID的TextView(确保布局里有这个id) uuidTextView = findViewById(R.id.uuid_text_view); // 初始化Volley的请求队列 requestQueue = Volley.newRequestQueue(this); // 调用API获取UUID fetchUuidFromApi(); } private void fetchUuidFromApi() { String apiUrl = "http://mylocalpay.com/?serial_key_api=1&coupon=WURYFO"; // 创建JsonObjectRequest请求 JsonObjectRequest jsonRequest = new JsonObjectRequest( Request.Method.GET, apiUrl, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { // 先判断请求是否成功 boolean isSuccess = response.getBoolean("success"); if (isSuccess) { // 取出嵌套的data对象 JSONObject dataObject = response.getJSONObject("data"); // 获取uuid字段值 String uuidValue = dataObject.getString("uuid"); // 设置到TextView中 uuidTextView.setText(uuidValue); // 注意:你提供的API响应里uuid是空字符串,这里加个提示 if (uuidValue.isEmpty()) { Toast.makeText(MainActivity.this, "API返回的UUID为空", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(MainActivity.this, "API请求失败", Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); Toast.makeText(MainActivity.this, "JSON解析出错:" + e.getMessage(), Toast.LENGTH_SHORT).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); Toast.makeText(MainActivity.this, "网络请求出错:" + error.getMessage(), Toast.LENGTH_SHORT).show(); } } ); // 将请求添加到队列中执行 requestQueue.add(jsonRequest); } @Override protected void onStop() { super.onStop(); // 页面停止时取消所有请求,避免内存泄漏 if (requestQueue != null) { requestQueue.cancelAll(this); } } }
额外注意事项
- 确保你的布局文件(比如
activity_main.xml)里有一个id为uuid_text_view的TextView:<TextView android:id="@+id/uuid_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp"/> - 别忘了在
AndroidManifest.xml中添加网络权限:<uses-permission android:name="android.permission.INTERNET" /> - 你提供的API响应里
uuid字段是空字符串,所以设置后TextView会显示为空,这时候代码里的Toast会提示你这个情况,可能需要确认API的业务逻辑是否正确返回UUID。
内容的提问来源于stack exchange,提问作者Harshvardhan Singh Gaharwar
相关产品推荐
相关产品推荐

