在android studio中使用REST api根据用户ID获取用户名

在android studio中使用REST api根据用户ID获取用户名,android,mysql,android-studio,yii,Android,Mysql,Android Studio,Yii,我是本地android开发的新手。我正在安卓工作室工作。我已经使用yii创建了一个web服务api,我还在mysql中创建了两个名为Users和Activity的表,在User表中输入了一些数据,如下所示 现在我想知道的是,每当用户输入用户的id,就应该显示特定的用户名 为此,我按照这个堆栈进行布局 <EditText android:layout_width="wrap_content" android:layout_height="wrap_content"

我是本地android开发的新手。我正在安卓工作室工作。我已经使用
yii
创建了一个
web服务api
,我还在
mysql
中创建了两个名为
Users
Activity
的表,在
User
表中输入了一些数据,如下所示

现在我想知道的是,每当用户输入用户的
id
,就应该显示特定的
用户名

为此,我按照这个堆栈进行布局

 <EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPersonName|number"
    android:ems="10"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:id="@+id/etId"
    style="@style/Widget.AppCompat.EditText" />

<Button
    android:text="Submit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:id="@+id/btn_Submit"
    android:layout_alignBottom="@+id/etId" />

<TextView
    android:text="TextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="53dp"
    android:id="@+id/textView"
    android:textAppearance="@style/TextAppearance.AppCompat.Display1"
    android:layout_below="@+id/etId"
    android:layout_centerHorizontal="true" />
文本视图电视; 公共静态最终字符串LOG_TAG=MainActivity.class.getSimpleName()

这一点很重要

`button.setOnClickListener(新建button.OnClickListener(){

更新2

通过遵循这一点,我做到了以下几点

 if (android.os.Build.VERSION.SDK_INT > 9)
    {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
现在,我的应用程序不会崩溃,但它只显示
HI
而不是请求的数据

在调试它时,我遇到了异常
org.apache.http.conn.HttpHostConnectException:连接到http://localhost:8000 拒绝

当我在浏览器上请求它时,它会显示所需的结果,如下图所示

注意:

我正在模拟器上测试它


非常感谢您的帮助。

只有在主线程上使用web操作时才会发生NetworkMainThreadException
。请在
异步任务
或其他
线程
中运行您的代码:

new Thread(new Runnable(){
  @Override
  public void run() {
    // Do network action in this function
  }
}).start();
查看此以了解更多关于

注-

简言之

不要在UI线程中执行网络工作

但是

如果您使用简单线程,当您从网络响应中获取一些内容并希望在视图中显示它时(如在TextView中显示响应消息),您需要返回到UI线程

如果不这样做,您将得到
viewrotimpl$calledFromErrorThreadException

所以,对于新手,我建议
AssyncTask

更新

http://localhost

上面的主机已被运行代码的仿真器占用。如果要访问计算机的本地主机,请使用IP地址作为
http://yourip:8080/.

有关更多详细信息,请参阅此。

您应该:

  • 对Manifest.xml应用Internet权限
  • 网络不应在主线程上运行。您应在其他线程上运行
  • 您可以选择第三方库来简化网络请求,如截取或改装

  • Android通常不支持将
    localhost
    作为url,因为大多数计算机都是通过wifi或其他网络连接的。请尝试将
    localhost
    替换为系统的
    IPADDRESS
    。例如:

    String URL = "http://192.168.1.1:8000/app/web/users/"; //replace 192.168.1.1 with your ip address
    

    您遇到了什么错误?基于yii的API是否如预期工作?@M.WaqasPervez请查看我的
    更新1
    @Shadow是的,我已在
    ARC
    上测试过,并且
    GET
    方法工作正常。现在我只想使用
    GET
    方法。请先尝试硬编码的url。可能有一些拼写错误。不是wo当我在
    logcat
    中点击
    submit按钮时,我的应用程序卡住了,
    挂起所有线程和
    org.apache.http.conn.HttpHostConnectException:连接到http://My_ip:8000 拒绝
    我发布了一个新问题,请查看。您的新问题已经有了答案。请输入c如果缓冲区为空,请检查缓冲区。今后请记住在后台任务中执行网络工作。当我点击
    submit按钮时,我的应用程序无法工作
    
            @Override
            public void onClick(View v) {
                String query = editText.getText().toString();
                callWebService(query);
            }
        });`
    
     if (android.os.Build.VERSION.SDK_INT > 9)
        {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
    
    new Thread(new Runnable(){
      @Override
      public void run() {
        // Do network action in this function
      }
    }).start();
    
    String URL = "http://192.168.1.1:8000/app/web/users/"; //replace 192.168.1.1 with your ip address