Android Open Source - AndroidHttpTutorial Async Task Activity






From Project

Back to project page AndroidHttpTutorial.

License

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.

Java Source Code

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;
        }
    }
}




Java Source Code List

com.yanlu.android.learn.imageloadtutorial.app.AsyncTaskActivity.java
com.yanlu.android.learn.imageloadtutorial.app.MainActivity.java
com.yanlu.android.learn.imageloadtutorial.app.async.SimpleTask.java
com.yanlu.android.learn.imageloadtutorial.app.model.User.java