如何在Android中使用JSON Web服务?
我正在开发一个应用程序,我需要在其中使用Web服务。当我得到php文件和json数据时,我被要求做web服务。由于我是开发新手,我不知道如何用android native编写Web服务代码。经过长时间的搜索,我知道通过使用SOAP和REST,我们可以在android中使用web服务 有谁能给我推荐一些材料&如何在androidnative中使用jsonwebservices。 我们是否需要使用SOAP和REST服务在android中实现jsonwebservices,否则,使用SOAP和REST服务就可以获得代码如何在Android中使用JSON Web服务?,android,json,web-services,rest,soap,Android,Json,Web Services,Rest,Soap,我正在开发一个应用程序,我需要在其中使用Web服务。当我得到php文件和json数据时,我被要求做web服务。由于我是开发新手,我不知道如何用android native编写Web服务代码。经过长时间的搜索,我知道通过使用SOAP和REST,我们可以在android中使用web服务 有谁能给我推荐一些材料&如何在androidnative中使用jsonwebservices。 我们是否需要使用SOAP和REST服务在android中实现jsonwebservices,否则,使用SOAP和REST
由于我是一个新的发展,任何小的帮助将不胜感激 在我看来,最简单的方法就是使用 然后使用一些库解析结果,例如 如果还必须以JSON格式发送参数,则可以使用
POST
和HttpClient
发送JSON字符串
编辑:
示例可以如下所示:
public class DataObject {
private Integer intField;
private String strField;
// This is a class which object will be sent through http
}
public class Client {
public DataObject getData() {
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
//Here you have to read data from InputStream to String
String jsonData = readStream(in);
//Here you parse String using GSON
return (new Gson()).fromJson(jsonData,DataObject.class);
finally {
urlConnection.disconnect();
}
}
}
对于Json
public class HttpRequests {
private InputStream is = null;
public HttpRequests() { }
public String[] makeHttpRequest(String url, String method,List<NameValuePair> params) {
String[] result = new String[2];
try {
if(method == "POST"){
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
result[0]="true";
}else if(method == "GET"){
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
result[0]="true";
}
}catch (UnsupportedEncodingException e) {
result[0]=e.toString();
}catch (ClientProtocolException e) {
result[0]=e.toString();
}catch (IOException e) {
result[0]=e.toString();
}
if(result[0]=="true"){
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
is.close();
result[1]= sb.toString();
return result;
}catch (Exception e) {
result[0]= e.toString();
return result;
}
}else
return result;
}
公共类httprequest{
私有InputStream为空;
公共HttpRequests(){}
公共字符串[]makeHttpRequest(字符串url、字符串方法、列表参数){
字符串[]结果=新字符串[2];
试一试{
如果(方法==“POST”){
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
setEntity(新的UrlEncodedFormEntity(参数));
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
is=httpEntity.getContent();
结果[0]=“真”;
}else if(方法==“GET”){
DefaultHttpClient httpClient=新的DefaultHttpClient();
String paramString=URLEncodedUtils.format(params,“utf-8”);
url+=“?”+参数字符串;
HttpGet HttpGet=新的HttpGet(url);
HttpResponse HttpResponse=httpClient.execute(httpGet);
HttpEntity HttpEntity=httpResponse.getEntity();
is=httpEntity.getContent();
结果[0]=“真”;
}
}捕获(不支持的编码异常e){
结果[0]=e.toString();
}捕获(客户端协议例外e){
结果[0]=e.toString();
}捕获(IOE异常){
结果[0]=e.toString();
}
如果(结果[0]=“真”){
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8;
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null)
{
sb.追加(第+行“\n”);
}
is.close();
结果[1]=sb.toString();
返回结果;
}捕获(例外e){
结果[0]=e.toString();
返回结果;
}
}否则
返回结果;
}
其中列表是一个数组,其中包含要发送的项,如下所示
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("Name",name1));
params.add(new BasicNameValuePair("Email",email1));
HttpRequests myHttpRequests=new HttpRequests();
String[] responce= myHttpRequests.makeHttpRequest(SignUpURL,
"POST", params);
List params=new ArrayList();
参数添加(新的BasicNameValuePair(“名称”,名称1));
参数添加(新的BasicNameValuePair(“电子邮件”,email1));
HttpRequests myHttpRequests=新的HttpRequests();
String[]response=myHttpRequests.makeHttpRequest(SignUpURL,
“POST”,params);
您可以使用普通的httpclient或httpurlconnection
但最好使用AsynchHttp,这是解析json数据的最佳选择
你也可以使用一些API,比如jakson(http://jackson.codehaus.org/)哪个更快
对于应用程序和服务器之间的连接,您需要创建api类
public class PostParseGet {
public Context mActivity;
public boolean isNetError = false;
public boolean isConnectionTimeError = false;
public boolean isOtherError = false;
public boolean isDataError = false;
Object mFillObject;
// List<PropertyInfo> mPropertyInfo;
//
// CommonHelper mCommonHelper;
//
// SoapObject mSoapObjectRequest;
HashMap<String, String> mHashMap;
Gson mGson;
public PostParseGet(Context context) {
mActivity = context;
mGson = new Gson();
// mCommonHelper= new CommonHelper(mActivity);
}
public boolean check_Internet(Context mContext){
ConnectivityManager mConnectivityManager;
NetworkInfo mNetworkInfo;
mConnectivityManager= (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if(mNetworkInfo != null && mNetworkInfo.isConnectedOrConnecting())
return true;
else
return false;
}
public static boolean isInternetOncheck(Context context) {
ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (!(connec.getActiveNetworkInfo() != null && connec.getActiveNetworkInfo().isAvailable() && connec.getActiveNetworkInfo().isConnected())) {
// AppLog.logString(TAG+"Internet not avialable");
return false;
} else {
// AppLog.logString(TAG+"Internet available");
return true;
}
}
public Object httpPostData(String method,Object mObject,List<NameValuePair> postParameters,String json,String AddArrayName){
BufferedReader in = null;
isOtherError = false;
isConnectionTimeError = false;
mFillObject= null;
if(check_Internet(mActivity)){
isNetError = false;
isDataError=false;
try {
mFillObject = mObject.getClass().newInstance();
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
int timeoutConnection = 30*1000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 30*1000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient client = new DefaultHttpClient(httpParameters);
// String url = TagValues.SCU_URL+method;
String url = method;
HttpPost request = new HttpPost(url);
System.out.println("-----url "+url);
if(json!=null && !json.equalsIgnoreCase("")){
StringEntity params =new StringEntity(json.toString(), "UTF-8");
params.setContentType("application/json");
request.setEntity(params);
System.out.println("-----parameters "+json);
}else{
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
System.out.println("-----parameters "+postParameters.toString());
}
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
// in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
String result="";
try {
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
result = sb.toString();
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
in.close();
}catch (IOException e) {
e.printStackTrace();
}
}
if(result!=null)
if(!AddArrayName.equalsIgnoreCase("")){
result = "{"+AddArrayName+":"+result+"}";
}
// Log.i("Appname", "Response: \n" + result);
System.out.println("------- Final data: "+result);
mFillObject = mGson.fromJson(result, mFillObject.getClass());
}catch (Exception e) {
e.printStackTrace();
isOtherError = true;
}
}else{
isNetError = true;
}
return mFillObject;
}
}
parcelabel类也是这样定义的
public class ParcelabelClass implements Parcelable{
private List<GradeDataList> GradeList;
public List<GradeDataList> getGradeList() {
return GradeList;
}
public void setGradeList(List<GradeDataList> listData) {
GradeList = listData;
}
public GradeList(){
GradeList = new ArrayList<GradeDataList>();
// AutoCompleteIdName = new ArrayList<VoucherDataList>();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel arg0, int arg1) {
arg0.writeTypedList(GradeList);
// arg0.writeTypedList(AutoCompleteIdName);
}
public static Parcelable.Creator<GradeList> CREATOR= new Creator<GradeList>() {
@Override
public GradeList[] newArray(final int size) {
return new GradeList[size];
}
@Override
public GradeList createFromParcel(final Parcel source) {
return new GradeList(source);
}
};
public GradeList(final Parcel in){
in.readTypedList(GradeList, GradeDataList.CREATOR);
}
public static class GradeDataList implements Parcelable{
private String id = "";
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public GradeDataList(){
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
}
public static Parcelable.Creator<GradeDataList> CREATOR = new Creator<GradeDataList>() {
@Override
public GradeDataList[] newArray(final int size) {
return new GradeDataList[size];
}
@Override
public GradeDataList createFromParcel(final Parcel source) {
return new GradeDataList(source);
}
};
public GradeDataList(final Parcel in){
id= in.readString();
}
}
}
公共类ParcelabelClass实现Parcelable{
私人名单;
公共列表getGradeList(){
返回成绩表;
}
公共无效setGradeList(列表数据){
成绩表=列表数据;
}
公开成绩表(){
等级列表=新的ArrayList();
//AutoCompleteIdName=新建ArrayList();
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效writeToParcel(地块arg0,内部arg1){
arg0.writeTypedList(成绩表);
//arg0.writeTypedList(自动完成名称);
}
public static Parcelable.Creator=new Creator(){
@凌驾
公共等级列表[]新数组(最终整数大小){
返回新的成绩表[大小];
}
@凌驾
公共等级表createFromParcel(最终地块来源){
返回新成绩表(来源);
}
};
公共等级表(中的最终包裹){
in.readTypedList(成绩表、成绩数据表、创建者);
}
公共静态类GradeDataList实现了Parcelable{
私有字符串id=“”;
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共数据表(){
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的写入限制(id);
}
public static Parcelable.Creator=new Creator(){
@凌驾
public GradeDataList[]新数组(最终整数大小){
返回新的GradeDataList[大小];
}
@凌驾
公共等级数据列表createFromParcel(最终地块源){
返回新的GradeDataList(源);
}
};
公共等级数据列表(中的最终地块){
id=in.readString();
}
}
}
阅读这篇文章解析JSON数据Hi@Michal,你能给我一些使用HTTPClient在android中使用JSON Web服务的示例代码吗……这里你给出了一些与“bufferreader”相关的代码,比如if(结果[0]==“true”),代码引用了什么。。?
mTextViewLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
// postParameters.add(new BasicNameValuePair("username",mEditTextUsername.getText().toString()));
// postParameters.add(new BasicNameValuePair("password",mEditTextPassword.getText().toString()));
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("username", mEditTextUsername.getText().toString());
jsonObject.put("password", mEditTextPassword.getText().toString());
}catch (JSONException e1) {
e1.printStackTrace();
}
if(PostParseGet.isInternetOncheck(LoginActivity.this)){
GetCommentList(TagValues.LOGIN_URL,jsonObject.toString(),postParameters);
}else{
CustomeDialog.dispDialog(LoginActivity.this, "Internet not available");
}
}
});
public void GetCommentList(String methodName,String json,List<NameValuePair> postParameters){
try {
mParcelableClass= new ParcelableClass();
ThreadAsyncTask testImple=new ThreadAsyncTask(listener, LoginActivity.this,mParcelableClass,json,methodName,postParameters,"");
testImple.execute("");
}catch (NullPointerException e) {}
}
private OnTaskCompleted listener = new OnTaskCompleted(){
@Override
public void onTaskCompleted(String methodName,Object result){
if(result!=null){
mParcelableClass= (ParcelableClass)result;
if(mParcelableClass!=null && mParcelableClass.getStatus()!=null && mParcelableClass.getStatus().equalsIgnoreCase("success")){
try {
Intent mIntent = new Intent(LoginActivity.this,YourSecondActivity.class);
startActivity(mIntent);
overridePendingTransition(R.anim.right_left, R.anim.right_left2);
}catch (NullPointerException e){
e.printStackTrace();
dispDialog(LoginActivity.this, "Invalid responce\n"+ e.toString());
return;
}catch (Exception e) {
e.printStackTrace();
dispDialog(LoginActivity.this, "Invalid responce\n"+ e.toString());
return;
}
}else{
dispDialog(LoginActivity.this, "Invalid Credential");
}
}
}
};
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/backrepeat"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="@dimen/margin_5"
android:gravity="center"
android:orientation="horizontal"
android:padding="@dimen/margin_10" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminate="true" />
<TextView
android:id="@+id/txtMessage_progressBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/margin_10"
android:gravity="center"
android:padding="@dimen/margin_10"
android:text="Please wait..."
android:textColor="@color/textColor"
android:textSize="@dimen/textsize_10sp"
android:textStyle="bold" />
</LinearLayout>
public static void dispDialog(Activity ac,String dialogMsg){
final Activity activity=ac;
final Dialog Alert_Dialog = new Dialog(ac);
Alert_Dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Alert_Dialog.setContentView(R.layout.dailog_error);
((TextView)Alert_Dialog.findViewById(R.id.txtMessage)).setText(""+dialogMsg);
Alert_Dialog.setCancelable(false);
Alert_Dialog.show();
((Button) Alert_Dialog.findViewById(R.id.ok)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Alert_Dialog.cancel();
activity.finish();
activity.overridePendingTransition(R.anim.left_right, R.anim.left_right2);
}
});
public class ParcelabelClass implements Parcelable{
private List<GradeDataList> GradeList;
public List<GradeDataList> getGradeList() {
return GradeList;
}
public void setGradeList(List<GradeDataList> listData) {
GradeList = listData;
}
public GradeList(){
GradeList = new ArrayList<GradeDataList>();
// AutoCompleteIdName = new ArrayList<VoucherDataList>();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel arg0, int arg1) {
arg0.writeTypedList(GradeList);
// arg0.writeTypedList(AutoCompleteIdName);
}
public static Parcelable.Creator<GradeList> CREATOR= new Creator<GradeList>() {
@Override
public GradeList[] newArray(final int size) {
return new GradeList[size];
}
@Override
public GradeList createFromParcel(final Parcel source) {
return new GradeList(source);
}
};
public GradeList(final Parcel in){
in.readTypedList(GradeList, GradeDataList.CREATOR);
}
public static class GradeDataList implements Parcelable{
private String id = "";
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public GradeDataList(){
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
}
public static Parcelable.Creator<GradeDataList> CREATOR = new Creator<GradeDataList>() {
@Override
public GradeDataList[] newArray(final int size) {
return new GradeDataList[size];
}
@Override
public GradeDataList createFromParcel(final Parcel source) {
return new GradeDataList(source);
}
};
public GradeDataList(final Parcel in){
id= in.readString();
}
}
}