如何在Android中使用JSON Web服务?

如何在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

我正在开发一个应用程序,我需要在其中使用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();

    }


}

}