Back to project page AndroidHttpTutorial.
The source code is released under:
Apache License
If you think the Android project AndroidHttpTutorial listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.yanlu.android.learn.imageloadtutorial.app; /* w ww.ja va2 s .co m*/ import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; import com.google.gson.Gson; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import com.yanlu.android.learn.imageloadtutorial.app.async.SimpleTask; import com.yanlu.android.learn.imageloadtutorial.app.model.User; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class AsyncTaskActivity extends Activity { private ProgressDialog mProgressDialog = null; private TextView mContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_async_task); mContent = (TextView) findViewById(R.id.tv_content); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.async_task, 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 activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * postData() */ public static int bufferSize = 1024; public String postDataByUrl(String uri) throws Exception { URL url = new URL(uri); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); //post??,?????????????true?conn.setDoInput(true);???true??????????? conn.setDoOutput(true); //post????????? conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); //????json????????????? conn.setRequestProperty("Content-Type", "application/json"); //connection.getOutputStream?????????connect? //conn.connect();//??????? //DataOutputStream?? DataOutputStream out = new DataOutputStream(conn.getOutputStream()); //??json? User obj = new User(); obj.setName("yanlu"); Gson gson = new Gson(); //?json????? out.writeBytes(gson.toJson(obj)); //?????????? out.flush(); out.close(); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream())); int charRead; char[] buffer = new char[bufferSize]; StringBuilder sb = new StringBuilder(); while ((charRead = bufferedReader.read(buffer)) > 0) { sb.append(buffer, 0, charRead); } bufferedReader.close(); return sb.toString(); } return null; } private static String postUrl = "http://tomp110.me/webapi/weixin/demo"; public void onPostByUrl(View view) { new SimpleTask<String>() { @Override protected void onTaskBefore() { showDialog(); } @Override protected String onTask() throws Exception { return postDataByUrl(postUrl); } @Override protected void onTaskAfter(String s) throws Exception { mContent.setText(s); dismissDialog(); } }.start(); } static int AC_REQUEST_CODE_SELECTION = 1000; public void onUploadByUrl(View view) { Intent intent = new Intent(); intent.setType("image/*"); intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), AC_REQUEST_CODE_SELECTION); } private String uploadUrl = "http://tomp110.me/webapi/file/upload"; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && AC_REQUEST_CODE_SELECTION == requestCode) { final String localfile = getPicPathFromUri(data.getData()); new SimpleTask<String>() { @Override protected void onTaskBefore() { showDialog(); } @Override protected String onTask() throws Exception { return uploadUseUrlConnection(uploadUrl, new File(localfile)); } @Override protected void onTaskAfter(String s) throws Exception { mContent.setText(s); dismissDialog(); } }.start(); } } public static String CRLF = "\r\n"; public static String twoHyphens = "--"; public static String boundary = "--WebKitFormBoundaryvpkLycg6WqoFy8qT"; public String uploadUseUrlConnection(String requestUrl, File file) throws Exception { String newName = file.getName(); URL url = new URL(requestUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); // ??RequestProperty conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); // ??DataOutputStream?? DataOutputStream ds = new DataOutputStream(conn.getOutputStream()); ds.writeBytes(twoHyphens + boundary + CRLF); ds.writeBytes("Content-Disposition: form-data; " + "name=\"uploadFile\";filename=\"" + newName + "\"" + CRLF); ds.writeBytes(CRLF); // ?????????FileInputStream?? FileInputStream fis = new FileInputStream(file); // ???????1024bytes byte[] buffer = new byte[bufferSize]; int length; // ??????????????? while ((length = fis.read(buffer)) != -1) { // ?????DataOutputStream? ds.write(buffer, 0, length); } ds.writeBytes(CRLF); ds.writeBytes(twoHyphens + boundary + twoHyphens + CRLF); // ???? fis.close(); ds.flush(); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream())); int charRead; char[] chars = new char[bufferSize]; StringBuilder sb = new StringBuilder(); while ((charRead = bufferedReader.read(chars)) > 0) { sb.append(chars, 0, charRead); } bufferedReader.close(); return sb.toString(); } return null; } OkHttpClient client = new OkHttpClient(); String run(String url) throws IOException { Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); return response.body().string(); } public void onOkHttpGet(View view) { new SimpleTask<String>() { @Override protected void onTaskBefore() { showDialog(); } @Override protected String onTask() throws Exception { return run("http://tomp110.me/webapi/fragment/left"); } @Override protected void onTaskAfter(String s) throws Exception { mContent.setText(s); dismissDialog(); } }.start(); } private void dismissDialog(){ if (mProgressDialog != null && mProgressDialog.isShowing()) { mProgressDialog.dismiss(); } } private void showDialog(){ mProgressDialog = ProgressDialog.show(this, " ????", "????????...", true); } public String getPicPathFromUri(Uri uri) { String value = uri.getPath(); if (value.startsWith("/external")) { String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(uri, proj, null, null, null); // Cursor cursor = activity.managedQuery(uri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } else { return value; } } }