PDA

View Full Version : ارسال مقادیر POST به عنوان آرگومان به تابع



keyhan.taktaz
شنبه 21 دی 1392, 03:29 صبح
سلام
دوستان من یه کلاس پیدا کردم برای ارسال و دریافت مقادیر POST و GET (اگه بهترشو دارید دریغ نکنید)
اگه دقت کنید یه تابع داره به اسم sendPost که یک مقدار میگیره به عنوان DATA.
خوب میخواستم ببینم مقادیری که میخوام POST بشن رو چجوری PASS بدم به این تابع؟؟؟
مشکلم فقط ساخت متغیر data هست.آنمیدونم آرایه باید باشه یا متغیر .اگه آرایه باشه چطوری 2 بعدی باشه که اسم و مقدار ارسال شه.
آرایه باید چطوری باشه که؟
اینجوری؟ :


data = ["name:value","name2:value2"];


کلاس :

package com.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

import android.util.Log;

public class Connection{

DefaultHttpClient httpClient;
HttpContext localContext;
private String ret;

HttpResponse response = null;
HttpPost httpPost = null;
HttpGet httpGet = null;

public Connection(){
HttpParams myParams = new BasicHttpParams();

HttpConnectionParams.setConnectionTimeout(myParams , 10000);
HttpConnectionParams.setSoTimeout(myParams, 10000);
httpClient = new DefaultHttpClient(myParams);
localContext = new BasicHttpContext();
}

public void clearCookies() {
httpClient.getCookieStore().clear();
}

public void abort() {
try {
if (httpClient != null) {
System.out.println("Abort.");
httpPost.abort();
}
} catch (Exception e) {
System.out.println("Your App Name Here" + e);
}
}

public String sendPost(String url, String data) {
return sendPost(url, data, null);
}

public String sendJSONPost(String url, JSONObject data) {
return sendPost(url, data.toString(), "application/json");
}

public String sendPost(String url, String data, String contentType) {
ret = null;

httpClient.getParams().setParameter(ClientPNames.C OOKIE_POLICY, CookiePolicy.RFC_2109);

httpPost = new HttpPost(url);
response = null;

StringEntity tmp = null;

Log.d("Your App Name Here", "Setting httpPost headers");

httpPost.setHeader("User-Agent", "SET YOUR USER AGENT STRING HERE");
httpPost.setHeader("Accept", "text/html,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");

if (contentType != null) {
httpPost.setHeader("Content-Type", contentType);
} else {
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
}

try {
tmp = new StringEntity(data,"UTF-8");
} catch (UnsupportedEncodingException e) {
Log.e("Your App Name Here", "HttpUtils : UnsupportedEncodingException : "+e);
}

httpPost.setEntity(tmp);

Log.d("Your App Name Here", url + "?" + data);

try {
response = httpClient.execute(httpPost,localContext);

if (response != null) {
ret = EntityUtils.toString(response.getEntity());
}
} catch (Exception e) {
Log.e("Your App Name Here", "HttpUtils: " + e);
}

Log.d("Your App Name Here", "Returning value:" + ret);

return ret;
}

public String sendGet(String url) {
httpGet = new HttpGet(url);

try {
response = httpClient.execute(httpGet);
} catch (Exception e) {
Log.e("Your App Name Here", e.getMessage());
}

//int status = response.getStatusLine().getStatusCode();

// we assume that the response body contains the error message
try {
ret = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
Log.e("Your App Name Here", e.getMessage());
}

return ret;
}

public InputStream getHttpStream(String urlString) throws IOException {
InputStream in = null;
int response = -1;

URL url = new URL(urlString);
URLConnection conn = url.openConnection();

if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");

try{
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();

response = httpConn.getResponseCode();

if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
} catch (Exception e) {
throw new IOException("Error connecting");
} // end try-catch

return in;
}
}

Felony
شنبه 21 دی 1392, 06:21 صبح
همه چیز خیلی واضح هست ، ورودی پارامتر Data یک رشته هست ( شما تعریفی از آرایه میبینی ؟ ) ، دیتای مورد نظرت باید یک رشته باشه ، حالا اگر مقادیر مختلفی میخوای در یک ارسال فرستاده بشی میتونی اونها رو به صورت comma delimited ارسال کنی ( هر مقدار رو با , یا ... از بعدی جدا کنی ) ، اون طرف هم موقع دریافت اون ها رو Parse کنی و ازشون استفاده کنی .

keyhan.taktaz
شنبه 21 دی 1392, 07:38 صبح
یه سوال دیگه هم داشتم که نمیخوام پست بدم.
چطور میشه زمانی که با سرور اطلاعات رفت و بدل میشه dialog بیاد که منتظر باشید؟
مثلا ما از یه activity این کلاس رو فراخوانی میکنیم و میخوایم موقعی که ارتباط برقرار شد dialog بیاد که منتظر باشید