通过php在java(android studio)中获取数据


Get data in java ( android studio ) via php

正如标题所示,只想从我的php文件中获取数据&检查输入的电子邮件、密码是否为注册用户。如果是,则重定向到成功页面(TimelineActivity)

因此,我们看了一下:-如何在android 中使用php脚本从mysql数据库中获取值

这是我的LoginBasicActivity.java

public class LoginBasicActivity extends AppCompatActivity {
public AutoCompleteTextView uemail;
public EditText upassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login_basic);
   uemail = (AutoCompleteTextView) findViewById(R.id.emailBasic);
   upassword = (EditText) findViewById(R.id.passwordBasic)  ;
    Button buttonLog = (Button) findViewById(R.id.buttonLog);
    buttonLog.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            String tem;
            String email = uemail.getText().toString();
            String result = null;
           String password = upassword.getText().toString() ;
           // HttpClientBuilder.create();
           // As  HttpClient client = new DefaultHttpClient(); is not used anymore
            HttpClient client = HttpClients.createDefault();
            tem = "http://www.example_domain.com/app_folder/verify-user.php?username="+email+"&password="+password;
            HttpGet request = new HttpGet(tem);
            try {
                HttpResponse response = client.execute(request);
                HttpEntity entity = response.getEntity();
                InputStream is = entity.getContent();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader reader = new BufferedReader(isr);
                result = reader.readLine();
            } catch (Exception e) {
                e.printStackTrace();
            }
               if (result.equals("0") == true) {
                  Toast.makeText(getApplicationContext(), "Sorry try again", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getApplicationContext(), "Welcome Client", Toast.LENGTH_LONG).show();
                Intent myIntt = new Intent(view.getContext(), TimelineActivity.class);
                startActivityForResult(myIntt, 0);
              }
          }
      });
  }
 }

这是verify-user.php

 <?php
  mysql_connect("localhost","user_name","user_password") or die(mysql_error());
  mysql_select_db("db_name") or die(mysql_error());
  $username=$_REQUEST['username'];
  $password=$_REQUEST['password'];
  $SelectQuery="select * from table_name where C_Username='$username' and C_Password='$password'";
  $result=mysql_query($SelectQuery) or die(mysql_error());
  $count=mysql_num_rows($result);
  $row=mysql_fetch_array($result);
  if($count==0)
    echo "0";
  else
    echo $row['c_id'];
 ?>

在这之后,我在build.gradle中遇到了一些文件复制问题,所以在build.gradle 中添加了这个

 android {
 packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
   }
}`

现在,当按下登录按钮时,对话框显示"不幸的app_name已停止"

Logcat:-https://www.dropbox.com/s/63cv806z4y8h9my/2015-11-10-05-01-44%5B1%5D.txt?dl=0

我对安卓Java有点陌生。

如何解决此问题?有人能解释一下正确的语法吗?哪里出了问题?

您正在通过主线程发出网络(api)请求,这导致了问题。使api从线程命中,或者为其使用AsyncTask或Loader。还要检查您是否已将internet权限添加到清单文件中。如果没有,请在清单文件中添加以下行。

<uses-permission android:name="android.permission.INTERNET"/>

编辑:您可以在活动中创建一个内部类,如下所示,并使用new LoginAsyncTask().execute()在按钮点击时调用它;

公共类LoginAsyncTask扩展AsyncTask&ltVoid,Void,String>protected字符串doInBackground(Void…params){//在后台线程中运行(无法访问UI,也无法在此处执行与UI相关的操作)。//让你的网络点击这里,并返回结果,在你的情况下是字符串。//onPostExecute方法在该方法返回后自动调用。。。。}受保护的void on PreExecute(){//在主线程上运行(可以访问UI)//如果需要的话,在网络接入之前在这里进行一些初始化。。。。}protected void onPostExecute(字符串结果){//方法在主线程上运行,可以访问UI。result是doInBackground方法返回的值。//对结果进行检查,并相应地执行下一步操作。。。。。。}}