美文网首页android相关知识
android studio 插件开发

android studio 插件开发

作者: 丿灬序曲 | 来源:发表于2018-02-25 15:47 被阅读0次

详细插件源码开发流程查看
参考
http://blog.csdn.net/lmj623565791/article/details/51548272
本文主要内容出自:【张鸿洋的博客】

翻译插件源码

package com.rjz.text;

import com.google.gson.Gson;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.ui.JBColor;
import com.intellij.ui.awt.RelativePoint;

import javax.swing.*;
import java.awt.*;

public class TranslateAction extends AnAction {
    String baseUrl = "http://fanyi.youdao.com/openapi.do?keyfrom=Skykai521&key=977124034&type=data&doctype=json&version=1.1&q=";
    @Override
    public void actionPerformed(AnActionEvent e) {
        // TODO: insert action logic here
        String inputValue = JOptionPane.showInputDialog("请输入需要翻译的字符串");

        String value = HttpUtils.sendGet(baseUrl, inputValue);

        ApplicationManager.getApplication().invokeLater(new Runnable() {
            public void run() {
                JBPopupFactory factory = JBPopupFactory.getInstance();
                Gson gson = new Gson();
                TranslateBean translateBean = gson.fromJson(value, TranslateBean.class);
                String explains = "";
                if (translateBean.getBasic() == null) {
                    explains = translateBean.getTranslation().get(0);
                } else {
                    for (int i = 0; i < translateBean.getBasic().getExplains().size(); i++) {
                        explains = explains + "\n" + translateBean.getBasic().getExplains().get(i);
                    }
                }
                factory.createHtmlTextBalloonBuilder(inputValue +
                                "\n翻译:" + explains
                        , null, new JBColor(new Color(186, 238, 186), new Color(73, 117, 73)), null)
                        .setFadeoutTime(8000)
                        .createBalloon()
                        .show(new RelativePoint(new Point(500, 500)), Balloon.Position.below);
            }
        });
    }

}

HttpUtils源码(网上随便找的一个)

package com.rjz.text;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;

public class HttpUtils {
    /**
     * 向指定URL发送GET方法的请求
     *
     * @param url   发送请求的URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */
    public static String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;
        try {
            param = URLEncoder.encode(param, "utf-8");
            String urlNameString = url /*+ "?"*/ + param;

            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();
            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.out.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream(), "utf-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
            e.printStackTrace();
        }
        // 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url   发送请求的 URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!" + e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }
}

封装的bean(用插件自己生成一个就行)

package com.rjz.text;

import java.util.List;

/**
 * Created by jiazhuo.ren on 2018/2/25.
 */

public class TranslateBean {

    /**
     * translation : ["测试"]
     * basic : {"us-phonetic":"tɛst","phonetic":"test","uk-phonetic":"test","explains":["n. 试验;检验","vt. 试验;测试","vi. 试验;测试","n. (Test)人名;(英)特斯特"]}
     * query : test
     * errorCode : 0
     * web : [{"value":["测试","测验","检验"],"key":"Test"},{"value":["Test Drive","Test Drive","无限狂飙"],"key":"Test Drive"},{"value":["测试员","测试工程师","软件测试工程师"],"key":"Test Engineer"}]
     */

    private BasicBean basic;
    private String query;
    private int errorCode;
    private List<String> translation;
    private List<WebBean> web;

    public BasicBean getBasic() {
        return basic;
    }

    public void setBasic(BasicBean basic) {
        this.basic = basic;
    }

    public String getQuery() {
        return query;
    }

    public void setQuery(String query) {
        this.query = query;
    }

    public int getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(int errorCode) {
        this.errorCode = errorCode;
    }

    public List<String> getTranslation() {
        return translation;
    }

    public void setTranslation(List<String> translation) {
        this.translation = translation;
    }

    public List<WebBean> getWeb() {
        return web;
    }

    public void setWeb(List<WebBean> web) {
        this.web = web;
    }

    public static class BasicBean {
        /**
         * us-phonetic : tɛst
         * phonetic : test
         * uk-phonetic : test
         * explains : ["n. 试验;检验","vt. 试验;测试","vi. 试验;测试","n. (Test)人名;(英)特斯特"]
         */

        @com.google.gson.annotations.SerializedName("us-phonetic")
        private String usphonetic;
        private String phonetic;
        @com.google.gson.annotations.SerializedName("uk-phonetic")
        private String ukphonetic;
        private List<String> explains;

        public String getUsphonetic() {
            return usphonetic;
        }

        public void setUsphonetic(String usphonetic) {
            this.usphonetic = usphonetic;
        }

        public String getPhonetic() {
            return phonetic;
        }

        public void setPhonetic(String phonetic) {
            this.phonetic = phonetic;
        }

        public String getUkphonetic() {
            return ukphonetic;
        }

        public void setUkphonetic(String ukphonetic) {
            this.ukphonetic = ukphonetic;
        }

        public List<String> getExplains() {
            return explains;
        }

        public void setExplains(List<String> explains) {
            this.explains = explains;
        }
    }

    public static class WebBean {
        /**
         * value : ["测试","测验","检验"]
         * key : Test
         */

        private String key;
        private List<String> value;

        public String getKey() {
            return key;
        }

        public void setKey(String key) {
            this.key = key;
        }

        public List<String> getValue() {
            return value;
        }

        public void setValue(List<String> value) {
            this.value = value;
        }
    }
}

相关文章

网友评论

    本文标题:android studio 插件开发

    本文链接:https://www.haomeiwen.com/subject/koyrxftx.html