Android PHP는 HttpClient를 사용하여 POST 요청을 제출하고 JSON을 사용하여 응답을 구문 분석합니다.

WBOY
풀어 주다: 2016-07-29 09:12:42
원래의
1456명이 탐색했습니다.

다음은 Android 프로그램에 네트워킹 기능을 추가하는 방법을 소개합니다. 물론, 먼저 서버가 있어야 합니다. 테스트만 한다면 대신 LAN(컴퓨터 Wi-Fi에 연결된 휴대폰)을 사용할 수 있습니다.

컴퓨터가 Apache+PHP 환경으로 구성되어 있어야 합니다.

다음은 간단한 Android 프로그램입니다. 특정 Java 기반만 있으면 그 의미를 대략적으로 "추측"할 수 있다고 생각합니다. (프로그램이 잘 작성되지 않을 수 있습니다)

안드로이드 프로그램

레이아웃 파일

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/<strong>Activity</strong>_vertical_margin"
    android:paddingLeft="@dimen/<strong>Activity</strong>_horizontal_margin"
    android:paddingRight="@dimen/<strong>Activity</strong>_horizontal_margin"
    android:paddingTop="@dimen/<strong>Activity</strong>_vertical_margin"
    tools:c
    android:orientation="vertical" >

    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:<strong>gravity</strong>="center"
        android:text="使用JSON解析"
        android:textSize="30sp"/>
    
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:<strong>gravity</strong>="center">
        
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="账号"
        android:textSize="20sp"
        android:layout_marginRight="20dp" />
        
        <EditText 
            android:id="@+id/et_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    
	<LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:<strong>gravity</strong>="center">
        
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密码"
        android:textSize="20sp"
        android:layout_marginRight="20dp" />
        
        <EditText 
            android:id="@+id/et_psw"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>    
    
	<Button 
	    android:id="@+id/btn_login"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:text="登录"/>
</LinearLayout>
로그인 후 복사
MainActivity.java

package com.example.jsontest;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.<strong>Apache</strong>.http.HttpEntity;
import org.<strong>Apache</strong>.http.HttpResponse;
import org.<strong>Apache</strong>.http.NameValuePair;
import org.<strong>Apache</strong>.http.client.HttpClient;
import org.<strong>Apache</strong>.http.client.entity.UrlEncodedFormEntity;
import org.<strong>Apache</strong>.http.client.methods.HttpPost;
import org.<strong>Apache</strong>.http.impl.client.DefaultHttpClient;
import org.<strong>Apache</strong>.http.message.BasicNameValuePair;
import org.<strong>Apache</strong>.http.protocol.HTTP;
import org.json.JSONArray;
import org.json.JSONObject;

import android.os.Bundle;
import android.os.Looper;
import android.support.v7.app.ActionBar<strong>Activity</strong>;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class Main<strong>Activity</strong> extends ActionBar<strong>Activity</strong> {
	EditText et_id;
	EditText et_psw;
	Button btn_login;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.<strong>Activity</strong>_main);
        
        initView();
    }
    
    private boolean check(String id, String psw) {
    	if("".equals(id) || "".equals(psw))
    		return false;
    	return true;
    }
    
    private void initView() {
    	et_id = (EditText)findViewById(R.id.et_id);
    	et_psw = (EditText)findViewById(R.id.et_psw);
    	btn_login = (Button)findViewById(R.id.btn_login);
    	
    	btn_login.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//获取用户输入的用户名和密码
				final String id = et_id.getText().toString().trim();
				final String psw = et_psw.getText().toString().trim();
				
				if(check(id, psw)) {
					new Thread() {
						public void run() {
							try {
								HttpPost post = new HttpPost("这里要改成服务器文件所在URL地址");
								//如果传递参数个数比较多,可以对传递的参数进行封装
								List<NameValuePair> params = new ArrayList<NameValuePair>();
								params.add(new BasicNameValuePair("id", id));
								params.add(new BasicNameValuePair("psw", psw));
								//设置请求参数
								post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
								
								HttpClient httpClient = new DefaultHttpClient();
								//发送POST请求
								HttpResponse response = httpClient.execute(post);
								//如果服务器成功地返回响应
								if(response.getStatusLine().getStatusCode() == 200) {
									//String msg = EntityUtils.toString(response.getEntity());
									HttpEntity entity = response.getEntity();
									InputStream is = entity.getContent();
									
									BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
									StringBuilder sb = new StringBuilder();
									sb.append(reader.readLine() + "\n"); // 这里 “ + "\n" ”加不加似乎对结果没有什么影响
									
									String line = "0";
									while((line = reader.readLine()) != null) {
										sb.append(line + "\n"); // 这里 “ + "\n" ”加不加似乎对结果没有什么影响
									}
									is.close();
									
									//获取请求响应结果
									String result = sb.toString();
									System.out.println(result);
									
									//打包成JSON进行解析
									JSONArray jsonArray = new JSONArray(result);
									JSONObject jsonData = null;
									//返回用户ID,用户密码
									String userId = "";
									String userPsw = "";
									//使用List进行存储
									List<String> data = new ArrayList<String>();
									for(int i = 0; i < jsonArray.length(); i++) {
										jsonData = jsonArray.getJSONObject(i);
										userId = jsonData.getString("userId"); //userId是来源于服务器端php程序响应结果res的<strong>索引</strong>,根据<strong>索引</strong>获取值
										userPsw = jsonData.getString("userPsw"); //userPsw是来源于服务器端php程序响应结果res的<strong>索引</strong>,根据<strong>索引</strong>获取值
										data.add("用户ID:" + userId + ",用户密码:" + userPsw); //保存返回的值,可进行相应的操作,这里只进行显示
									}
									
									Looper.prepare();
									Toast.makeText(Main<strong>Activity</strong>.this, data.toString(), Toast.LENGTH_LONG).show();
									Looper.loop();
								}
								else {
									Looper.prepare();
									Toast.makeText(Main<strong>Activity</strong>.this, "登录失败", Toast.LENGTH_LONG).show();
									Looper.loop();
								}
							}
							catch(<strong>Exception</strong> e) {
								e.printStackTrace();
							}
						}
					}.start();
				}
			}
		});
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent <strong>Activity</strong> in <strong>AndroidManifest.xml</strong>.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
로그인 후 복사

다음은 서버측 PHP 파일입니다(해당 파일은 데이터베이스에 연결 작업을 원하는 경우 데이터베이스에 연결하여 동적 데이터를 얻을 수 있습니다. PHP를 아는 사람은 쉽게 데이터베이스에 연결하는 작업으로 변경할 수 있습니다. 🎜> 데이터 획득)

checkId.php

<?php
	//获取客户端发送过来的ID和密码
	$id=$_POST[&#39;id&#39;];
	$psw=$_POST[&#39;psw&#39;];

	if($id == "admin" && $psw == "123") {
		$res=array(array());
		$res[0][&#39;userId&#39;]=$id;
		$res[0][&#39;userPsw&#39;]=$psw;

		$res[1][&#39;userId&#39;]="testId1";
		$res[1][&#39;userPsw&#39;]="testPsw1";

		$res[2][&#39;userId&#39;]="testId2";
		$res[2][&#39;userPsw&#39;]="testPsw2";
	}

	echo json_encode($res);
?>
로그인 후 복사


위 내용은 Android PHP가 HttpClient를 사용하여 POST 요청을 제출하고 JSON을 사용하여 중력, Apache, 예외, 인덱스 및 데이터베이스 연결을 포함한 응답을 구문 분석하는 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!