how to connect to local host from android ftp client with emulator? What ip and port number should used in method "connect(host,port)"? When I tried with 10.0.2.2,127.0.0.1 with port number 21 the connection is refused. I am using Ubuntu with eclipse.
please help...
you should use Asynctask like this code :
#Override
protected ArrayList doInBackground(String... params) {
// TODO Auto-generated method stub
//activity is defined as a global variable in your AsyncTask
try {
HttpClient hc = new DefaultHttpClient();
HttpGet hg = new HttpGet(params[0]);
HttpResponse hr = hc.execute(hg);
HttpEntity he = hr.getEntity();
data = EntityUtils.toString(he);
Log.i("data", data);
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
and then when you use it like this :
new asy().execute("http:// put your ip address here ");
Related
I know I can link to the Play Store with the URL:
market://details?id=com.example.appname
What I would love to do is 'ping' this URL in the background, and determine if the app is actually available, then, I can modify my UI as appropriate.
Let's assume that, if app is unavailable, the page under http://play.google.com/store/apps/details?id=<package_name> contains, for example, word error-section. If app is available, it does not contain this word.
Make HTTP GET to that URL and search for error-section.
No error-section - your app is available.
Otherwise, it's unavailable.
Like this:
final HttpClient client = new DefaultHttpClient();
final String getURL = "http://play.google.com/store/apps/details?id=<package_name>";
final HttpGet get = new HttpGet(getURL);
final HttpResponse responseGet = client.execute(get);
final HttpEntity resEntityGet = responseGet.getEntity();
if (resEntityGet != null)
{
final String response = EntityUtils.toString(resEntityGet);
if (response.indexOf("error-section") == -1)
{
// available
}
else
{
// unavailable
}
}
private class URLTest extends AsyncTask<Void, Void, Void> {
#Override
protected Void doInBackground(Void... params) {
try {
try {
HttpClient httpclient = new DefaultHttpClient();
String strurl = "https://play.google.com/store/apps/details?id=com.rovio.angrybirdsstarwars.ads.iap";
// String strurl =
// "https://play.google.com/store/apps/details?id=com.rovio.angrybirdsstarwars.ads.iaptest";
// //fake packagename append with "test"
HttpGet httpget = new HttpGet(strurl);
HttpResponse httpresp = httpclient.execute(httpget);
if (httpresp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
Log.e("Found", "YES");
} else if (httpresp.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) {
Log.e("Found", "NO");
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
Log.e("", "");
}
return null;
}
}
i tried with correct & fake packages and its giving bad request responze if the app not available & positive(success 200 code) if app is there..so plz check it once it might help u.
android 2.2 & app min req 2.3
I know my php file works, I can call it from localhost and I get the response.
I also know I have the correct ip address for calling it from the AVD because when I call the url from the browser in the AVD I get a response.
So the problem is in my asynctask function.
Here's my code from the asynctask class.
protected String doInBackground(String... args) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
try {
response = httpclient.execute(new HttpGet(url));
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String str) {
// updating UI from Background Thread
resp=str;
returned();
}
I'm calling this class from the parent class and putting the string from onpostexecute() to string resp, which is a string in the parent class. The response is always null.
Well, you ARE returning null, so your code is working as written.
Maybe instead of return null in doInBackground(), you want to return part of the http response?
I am trying to connect to the Google Tasks by using HttpClient but always get "Unauthorised HttpResponseException".
Here is my code inside the "run" method of the AccountManagerCallback
#Override
public void run(AccountManagerFuture<Bundle> result) {
// Get the result of the operation from the AccountManagerFuture.
Bundle bundle;
try {
bundle = result.getResult();
token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
Log.i("#######", token); // token does have value
String url = "https://www.googleapis.com/tasks/v1/users/#me/lists?key=" + your_api_key;
HttpGet getRequest = new HttpGet(url);
getRequest.addHeader("client_id", your_client_id);
getRequest.addHeader("client_secret", your_client_secret);
getRequest.addHeader("Authorization", "OAuth " + token);
HttpClient httpclient = new DefaultHttpClient();
String responseBody = httpclient.execute(getRequest, new BasicResponseHandler()); // exception raised here
Log.i("###", responseBody); // cannot get the response here
} catch (OperationCanceledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AuthenticatorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
I am using Google APIs Level 10 emulator which does have access to the internet and I did add an google account into it.
Appreciate for any helps or suggestions to make my code work. Thanks.
iused:
private void postFile() {
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost httppost = new HttpPost(ConstValue.SEARCH_BY_PICTER);
File file = new File(currentPath);
ContentBody cbFile = new FileBody(file, "image/jpeg");
MultipartEntity mpEntity = new MultipartEntity();
try {
mpEntity.addPart("fileToUpload", cbFile);
mpEntity.addPart("sys", new StringBody("android"));
mpEntity.addPart("ver", new StringBody(ConstValue.VERSION_NAME));
mpEntity.addPart("cid", new StringBody(cid));
mpEntity.addPart("page", new StringBody("1"));
mpEntity.addPart("offset", new StringBody("80"));
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
httppost.setEntity(mpEntity);
// System.out.println("executing request " + httppost.getRequestLine());
HttpResponse response = null;
try {
response = httpclient.execute(httppost);
} catch (ClientProtocolException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
HttpEntity resEntity = response.getEntity();
// System.out.println(response.getStatusLine());
if (resEntity != null) {
try {
final String response_str = EntityUtils.toString(resEntity);
if (!response_str.contains("####")) {
ConstValue.goodByPiclist = GoodXMLUtil.parseResponse(response_str);
} else {
Toast.makeText(context, "sorry,server is busy", 2000).show();
}
// Log.d("log", response_str);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (resEntity != null) {
try {
resEntity.consumeContent();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
httpclient.getConnectionManager().shutdown();
}
i used jar is httpmime-4.1.2.jar,the code is very well in android and other phone.but in samsung is9023 not run,if my code have mistake,if yes can you give me some advice or some good other method.very very thank you
edit: sorry i have solved the problem ,my code is right,and samsung is good,my mistake is i put image size is not valid
edit:i have meet new problem,in samsung only upload Pure color succeed as Pure white,Pure Black.other htc android phone any color ie very well.if samsung is9023 not trust httpmime-4.1.2.jar very well.because in php not receive any data if i used other pic in samsung
one possibilty can be that currentPath is hard coded like ../sdcard/ and as every device have diffrent external storage location so use Environment.getExternalDirectory() instead .
I'm trying to use HttpClient to connect to a php page that logs in and passes back a sessionid and then goes to a new page, using that sessionid and obtains a mySQL datafield associated with that sessionid.
On the first request, HttpClient can take 1.5 seconds, 6 seconds, or 2 minutes. If the first request was slow, subsequence requests seem to be faster, and visaversa.
The HttpClient request occurs when a Button view is clicked
Here's my code:
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
name = (TextView)findViewById(R.id.name);
user = (EditText) findViewById(R.id.user);
pass = (EditText) findViewById(R.id.pass);
submit = (Button) findViewById(R.id.button1);
submit.setOnClickListener(this);
HttpParams params1 = new BasicHttpParams();
params1.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
client = new DefaultHttpClient(params1);
httpclient = new DefaultHttpClient();
// Create a local instance of cookie store
cookieStore = new BasicCookieStore();
// Create local HTTP context
}
public void onClick(View v) {
if (v.getId() == R.id.button1) {
//submit.setClickable(false);
String username = user.getText().toString();
String password = pass.getText().toString();
String targetURL = "<<<<LOGIN PHP URL>>>>";
post = new HttpPost(targetURL);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
Log.d("params","params added");
try {
post.setEntity(new UrlEncodedFormEntity(params));
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Log.d("entity added","entityadded");
Log.d("preex","PRE EXECUTION");
localContext = new BasicHttpContext();
// Bind custom cookie store to the local context
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
//submit.setText("Logging In...");
new Thread(new Runnable(){
public void run(){
try {
Log.d("pre","pre execute");
response = client.execute(post,localContext);
Log.d("post","post execute");
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Log.d("post","FIANLLY");
try {
input = response.getEntity().getContent();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("response: ",convertStreamToString(input));
getFullName(localContext);
}
}
}).start();}
}
private void getFullName(final HttpContext context){
Log.d("called","called");
String targetURL = "<<<<SESSION CHECKER PHP URL>>>>";
//client1 = new DefaultHttpClient();
post1 = new HttpPost(targetURL);
Log.d("","about to call runable....");
// submit.setText("Obtaining Full Name...");
try {
Log.d("pre","CALLING!");
response = client.execute(post1,context);
Log.d("post","called..");
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Log.d("post","FIANLLY");
try {
//submit.setText("Full Name Obtained!...");
input = response.getEntity().getContent();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Log.d("response: ",convertStreamToString(input));
outputResponse(input);
}
}
private void outputResponse(final InputStream in) {
name.post(new Runnable(){
public void run(){
String fullname=convertStreamToString(in);
name.setText("Full Name is: "+fullname);
}
});
}
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
Before I set Http version 1.1 it took double the time, but for my application, the speed cannot be unreliable. This is all on a pretty fast WiFi connections -- can you image Edge or 3G speeds??
So what can I optimize?
Thanks everyone:)
EDIT: I did a new test with: http://www.posttestserver.com/ and it happened pretty fast. The urls I'm using currently aren't my final server urls, they are for a different site on a different server -- shared hosting, so could it be that contacting my shared hosting site is just slow and will be compared to my .net server?
Thanks again !