在android studio中使用REST api根据用户ID获取用户名
我是本地android开发的新手。我正在安卓工作室工作。我已经使用在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"
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