You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编程初学者求助:如何点击按钮从PHP链接获取数据显示到TextView

解决Android按钮点击请求PHP接口并显示数据的问题

嘿,作为编程初学者遇到这个问题太正常啦!我来帮你一步步实现这个需求,不用纠结之前那个没效果的库,咱们用更稳定、常用的方法来做~

第一步:配置必要的权限和网络设置

首先得让你的App能访问网络,还要处理明文HTTP请求的问题(因为你的接口是http开头的,Android 9+默认禁止明文请求):

  1. 添加网络权限
    打开AndroidManifest.xml,在<manifest>标签里(<application>外面)添加:

    <uses-permission android:name="android.permission.INTERNET" />
    
  2. 允许明文HTTP请求

    • 在res/xml目录下新建network_security_config.xml文件,内容如下:
      <?xml version="1.0" encoding="utf-8"?>
      <network-security-config>
          <base-config cleartextTrafficPermitted="true" />
      </network-security-config>
      
    • 回到AndroidManifest.xml,给<application>标签加上这个配置:
      <application
          ...
          android:networkSecurityConfig="@xml/network_security_config">
          ...
      </application>
      

第二步:用Volley实现网络请求(新手友好)

Volley是Google推荐的轻量级网络库,适合这种简单的Get请求,上手很快:

  1. 添加Volley依赖
    打开你的Module级别的build.gradle(通常是app/build.gradle),在dependencies里添加:

    implementation 'com.android.volley:volley:1.2.1'
    

    然后点击Sync Now同步依赖。

  2. 编写布局文件
    打开activity_main.xml,添加一个按钮和一个用于显示结果的TextView:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="16dp">
    
        <Button
            android:id="@+id/fetch_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取数据" />
    
        <TextView
            android:id="@+id/result_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:textSize="18sp" />
    
    </LinearLayout>
    
  3. 编写MainActivity逻辑
    打开MainActivity.java,实现按钮点击监听和网络请求:

    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    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.StringRequest;
    import com.android.volley.toolbox.Volley;
    
    public class MainActivity extends AppCompatActivity {
        private TextView resultTv;
        private RequestQueue requestQueue;
        private static final String API_URL = "http://sbms.atwebpages.com/SB/test.php?id=5";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            resultTv = findViewById(R.id.result_tv);
            Button fetchBtn = findViewById(R.id.fetch_btn);
            // 初始化Volley请求队列
            requestQueue = Volley.newRequestQueue(this);
    
            fetchBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 创建StringRequest,发起Get请求
                    StringRequest stringRequest = new StringRequest(Request.Method.GET, API_URL,
                            new Response.Listener<String>() {
                                @Override
                                public void onResponse(String response) {
                                    // 请求成功,把返回的内容设置到TextView
                                    resultTv.setText("返回数据:" + response);
                                }
                            }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            // 请求失败,显示错误信息
                            resultTv.setText("请求失败:" + error.getMessage());
                        }
                    });
                    // 将请求加入队列
                    requestQueue.add(stringRequest);
                }
            });
        }
    }
    

备选方案:用OkHttp实现

如果你想试试另一个常用的网络库OkHttp,步骤也很简单:

  1. 添加OkHttp依赖
    在app/build.gradle的dependencies里添加:

    implementation 'com.squareup.okhttp3:okhttp:4.10.0'
    
  2. 修改MainActivity的点击逻辑
    替换Volley的部分为OkHttp代码(注意要开异步线程):

    import okhttp3.Call;
    import okhttp3.Callback;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    import java.io.IOException;
    
    // ... 其他代码不变,替换按钮点击逻辑部分
    fetchBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(API_URL)
                    .build();
    
            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    // 请求失败,在主线程更新UI
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            resultTv.setText("请求失败:" + e.getMessage());
                        }
                    });
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if (response.isSuccessful()) {
                        final String responseData = response.body().string();
                        // 请求成功,在主线程更新UI
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                resultTv.setText("返回数据:" + responseData);
                            }
                        });
                    }
                }
            });
        }
    });
    

为什么之前的库没效果?

那个第三方库可能很久没维护了,或者配置步骤里有遗漏(比如权限、网络设置没配好),用官方推荐的Volley或者主流的OkHttp会更靠谱,遇到问题也更容易找到解决方案。

现在你可以运行App试试,点击按钮就能看到返回的25,25啦!

内容的提问来源于stack exchange,提问作者Abdullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:43:56