Android读取并解析Json

1、不可以在UI线程直接读取网络数据,所以另起线程处理这件事情

public class MainActivity extends ActionBarActivity implements IParseJsonCallback,IParseHtmlCallback{

    public void ParseJsonPage(List<PhaseResultBean> resultList) {
        new ParseJson(this).execute(resultList);
    }

    @Override
    public void ParseJsonDone(List<PhaseResultBean> resultList) {
        //回调函数
    }
}

2、回调接口

package com.neohope.android.gpjj;

import java.util.List;

public interface IParseJsonCallback {
        void ParseJsonDone(List<PhaseResultBean> resultList);
}

3、解析Json类

package com.neohope.android.gpjj;

import android.os.AsyncTask;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class ParseJson extends AsyncTask<String,Void,List<PhaseResultBean>>{

    private IParseJsonCallback jsonCallback;

    public ParseJson(IParseJsonCallback jsonCallback)
    {
        this.jsonCallback = jsonCallback;
    }

    @Override
    protected List<PhaseResultBean> doInBackground(String... params) {
        if(params==null)return null;
        List<PhaseResultBean> resultList= new ArrayList<PhaseResultBean>();

        String jsonString = params[0];
        try {
            JSONObject json= new JSONObject(jsonString);
            JSONArray jijinlist = json.getJSONArray("jijinlist");

            for(int i=0;i<jijinlist.length();i++)
            {
                JSONObject JJ= jijinlist.getJSONObject(i);
                PhaseResultBean result = new PhaseResultBean();
                result.code = JJ.getString("code");
                resultList.add(result);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return resultList;
    }

    @Override
    protected void onPostExecute(List<PhaseResultBean> resultList) {
        super.onPostExecute(resultList);
        jsonCallback.ParseJsonDone(resultList);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
}

Android用JSoup解析网页

1、不可以在UI线程直接读取网络数据,所以另起线程处理这件事情

public class MainActivity extends ActionBarActivity implements IParseJsonCallback,IParseHtmlCallback{

    public void ParseHtmlPage(List<PhaseResultBean> resultList) {
        new ParseHtml(this).execute(resultList);
    }

    @Override
    public void ParseHtmlDone(List<PhaseResultBean> resultList) {
        //回调函数
    }
}

2、回调接口

package com.neohope.android.gpjj;

import java.util.List;

public interface IParseHtmlCallback {
    void ParseHtmlDone(List<PhaseResultBean> resultList);
}

3、解析HTML类

package com.neohope.android.gpjj;

import android.os.AsyncTask;
import android.util.Log;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.List;

public class ParseHtml extends AsyncTask<List<PhaseResultBean>,Void,List<PhaseResultBean>>{

    private IParseHtmlCallback htmlCallback;

    public ParseHtml(IParseHtmlCallback htmlCallback)
    {
        this.htmlCallback = htmlCallback;
    }

    @Override
    protected List<PhaseResultBean> doInBackground(List<PhaseResultBean>... paramList) {
        if(paramList==null)return null;
        List<PhaseResultBean> params = paramList[0];
        for(PhaseResultBean bean : params) {
            Document doc = null;
            String url = bean.httpUrl;
            try {
                doc = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6").timeout(5000).followRedirects(true).get();
            } catch (IOException ex) {
                Log.w("", ex.getMessage());
                return null;
            }

            Document content = Jsoup.parse(doc.toString());
            Element dodydiv = content.getElementById("bodydiv");
            Element div = dodydiv.child(6).child(1).child(0).child(0);

            Element code = div.child(0).child(2);
            String szCode = code.text();

            Element title = div.child(0).child(1);
            String szTitle = title.text();

            bean.code = szCode;
            bean.name = szTitle;
        }

        return params;
    }

    @Override
    protected void onPostExecute(List<PhaseResultBean> listResult) {
        super.onPostExecute(listResult);
        htmlCallback.ParseHtmlDone(listResult);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
}

Android任务栏通知

        private static int nId = 0;

        private void RaiseSysTrayAlert(List<NEventBean> eventList)
        {
            NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            Context context = getApplicationContext();

            for(NEventBean bean : eventList)
            {
                Builder mBuilder = new Builder(context);
                mBuilder.setTicker("XXXX");
                mBuilder.setSmallIcon(R.drawable.ic_launcher);
                mBuilder.setContentTitle("XXXX");
                mBuilder.setContentText(bean.msg);
                mBuilder.setAutoCancel(true);

                Intent notifyIntent = new Intent(context, MainActivity.class);
                notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                PendingIntent pIntent = PendingIntent.getActivity(context, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                mBuilder.setContentIntent(pIntent);

                nId++;
                nm.notify(nId, mBuilder.build());
            }
        }

Android后台服务及自动运行

1、修改AndroidManifest.xml文件

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application ...>
        <service
            android:name="com.neohope.android.service.NService"
            android:enabled="true"
            android:exported="true" >
        </service>

        <receiver android:name="com.neohope.android.receiver.NBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
</application>

2、新增服务类

package com.neohope.android.service;

import android.app.Service;
import android.content.Context;
import android.content.Intent;

public class NService extends Service {

    public NService() {
        
    }

    @Override
    public void onCreate() {
        mainThread = new WorkThread ();
        mainThread.start();
    }

    @Override
    public void onDestroy() {
        mainThread.bEnd = true;
    }

    class WorkThread extends Thread
    {
        private int nInterval = 1000*60;
        private boolean bEnd = false;

        public JsonReaderThread()
        {
        }

        @Override
        public void run()
        {
            while(!bEnd)
            {
                DoSomething();

                try {
                    Thread.sleep(nInterval);
                } catch (InterruptedException e) {
                    Log.w("", "");
                }
            }
        }

        private void DoSomething()
        {
        }

}

3、新增广播处理类

package com.neohope.android.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import com.neohope.android.service.NService;

public class NBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent startServiceIntent = new Intent(context, NService.class);
        context.startService(startServiceIntent);
    }
}

4、在Activity中添加启动代码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        doStartService();
    }

    public void doStartService() {
        Context context = getApplicationContext();
        Intent startServiceIntent = new Intent(context, NService.class);
        context.startService(startServiceIntent);
    }

Android读取网页内容

1、修改AndroidManifest.xml文件

<uses-permission android:name="android.permission.INTERNET" />

2、网页读取类

package com.neohope.android.web;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

public class HttpUtils {

    public static String readStringFromUrl(String szUrl,String szCharcode) throws IOException {
        URL url = new URL(szUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5 * 1000);
        conn.setRequestMethod("GET");

        String szJson = "";
        int resPonseCode = conn.getResponseCode();
        if (conn.getResponseCode() == 200)
        {
            InputStream is = conn.getInputStream();
            byte[] data = readStream(is);
            szJson = new String(data,szCharcode);
        }

        return szJson;
    }

    private static byte[] readStream(InputStream inputStream) throws IOException {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inputStream.read(buffer)) != -1) {
            bout.write(buffer, 0, len);
        }
        bout.close();
        inputStream.close();

        return bout.toByteArray();
    }
}

CMD常用命令16获取命令行参数

wmic process where caption="java.exe" get caption,commandline /value

"D:\NeoLang\Java\JDK\jdk_x64_1.8.0_77\bin\java.exe"
-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-classpath "D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64\bin\bootstrap.jar;D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64\bin\tomcat-juli.jar"
-Dcatalina.base="D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64"
-Dcatalina.home="D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64"
-Djava.io.tmpdir="D:\NeoLang\Java\JavaContainer\apache-tomcat-8.5.16-windows-x64\temp"
org.apache.catalina.startup.Bootstrap  start

"C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe"
-Djetty.home=D:/GitHub/Jetty/binary/jetty-distribution-9.4.18.v20190429
-Djetty.base=D:/GitHub/Jetty/binary/jetty-distribution-9.4.18.v20190429
-Djava.io.tmpdir=C:/Users/Hansen/AppData/Local/Temp
-jar D:/GitHub/Jetty/binary/jetty-distribution-9.4.18.v20190429/start.jar jetty.state=D:/GitHub/Jetty/binary/jetty-distribution-9.4.18.v20190429/jetty.state jetty-started.xml

R语言做简单线性规划

首先要安装线性规划扩展包

install.packages("lpSolve")

例1:
某工厂甲、乙两种产品,每件甲产品要耗钢材2kg、煤2kg、产值为120元;每件乙产品要耗钢材3kg,煤1kg,产值为100元。现钢厂有钢材600kg,煤400kg,试确定甲、乙两种产品各生产多少件,才能使该厂的总产值最大?

解:

# 优化方向: 
# maximize
# 目标函数:
# f(X1,X2)=120X1+100X2
# 约束条件:
# 2X1+3X2<=600
# X1+X2<=400

#引用lpSolve
library (lpSolve)

#求解
f.obj <- c (120, 100)
f.con <- matrix ( c (2, 3, 1, 1), nrow = 2, byrow = TRUE )
f.dir <- c ( "<=" , "<=" )
f.rhs <- c (600, 400)
lp.result <- lp ( "max" , f.obj, f.con, f.dir, f.rhs)

#输出结果
lp.result
#Success: the objective function is 36000 

#输出解
lp.result$solution
#[1] 300   0

例2:
某工厂要做100套钢架,每套用长为2.9m,2.1m,1.5m的圆钢各一根。已知原料每根长7.4m,问:应如何下料,可使所用原料最省?(可选方案如下)

可选方案 方案1 方案2 方案3 方案4 方案5
2.9m 1 2 0 1 0
2.1m 0 0 2 2 1
1.5m 3 1 2 0 3
合计 7.4 7.3 7.2 7.1 6.6
剩余料头 0 0.1 0.2 0.3 0.8

解:

# 优化方向: 
# minimize
# 目标函数:
# f(X1,X2,X3,X4,X5)=0X1+0.1X2+0.2X3+0.3X4+0.8X5
# 约束条件:
# X1+2X2 + 0X3 + X4 + 0X5>=100
# 0X1+0X2 + 2X3 + 2X4 + 1X5>=100
# 3X1+X2 + 2X3 + 0X4 + 3X5>=100

#引用lpSolve
library (lpSolve)

#求解
f.obj <- c (0, 0.1, 0.2, 0.3, 0.8)
f.con <- matrix ( c (1, 2, 0, 1, 0, 0, 0, 2, 2, 1, 3, 1, 2, 0, 3), nrow = 3, byrow = TRUE )
f.dir <- c ( ">=", ">=", ">=" )
f.rhs <- c (100, 100, 100)
lp.result <- lp ( "min" , f.obj, f.con, f.dir, f.rhs)

#输出结果
lp.result
#Success: the objective function is 10

#输出解
lp.result$solution
#[1] 100   0  50   0   0

CMD常用命令15获取管理员权限模板

@echo off

:AQUIRE_ADMINISTRATOR_PRIVILEGE
rem 获取管理员权限
rem 首先在%windir%尝试新建文件夹,查看是否有管理员权限
rem 如果新建文件夹成功则删除文件夹,继续操作
rem 如果失败文件夹则新建vbs脚本,通过UAC窗口,获取管理员权限
rem 运行脚本后,删除vbs脚本
md "%windir%\TestAdminPrivilege" &gt; nul
cls
if '%errorlevel%' == '0' (
rmdir "%windir%\TestAdminPrivilege" &amp; goto gotAdmin
) else (goto UACPrompt)
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) &gt; "%temp%\getadmin.vbs"
echo UAC.ShellExecute %0, "", "", "runas", 1  &gt;&gt; "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" (del "%temp%\getadmin.vbs")
CD /D "%~dp0"

:Init
REM 设置窗口标题,窗口颜色,并输出提示信息,通过输入来判断跳转到哪里
cls
title CMD窗口标题
color A
set CHOICE=
echo ----------------------------提示信息标题-------------------------------------
echo.
echo                             提示信息内容
echo                             提示信息内容
echo.
echo ----------------------------------------------------------------------------
echo           您需要以管理员身份运行,或关闭“用户帐户控制(UAC)”
echo ----------------------------------------------------------------------------
:RE_INPUT
echo.
echo  键入 i 安装,键入 r 卸载,键入 q 退出 (键入后请按回车键确认)
set /P CHOICE= ^&gt; 选择:
if /I "%CHOICE%" == "i" goto INSTALL_DETECT
if /I "%CHOICE%" == "r" goto REMOVE
if /I "%CHOICE%" == "q" goto END
goto INPUT_UNKNOWN

:REMOVE
echo  删除提示信息
rem del /F /Q FULL_FILE_PATH
REM reg IMPORT UNINSTALL_DRIVER.REG
goto REMOVE_END

:REMOVE_END
echo  卸载完毕提示信息
goto END

:INSTALL_DETECT
REM 判断32位还是64位系统
if /I "%PROCESSOR_ARCHITECTURE%" == "AMD64" goto INSTALL64
if /I "%PROCESSOR_ARCHITECTURE%" == "x86" goto INSTALL32
goto INSTALL_UNKNOWN

:INSTALL64
echo  将为您安装64位程序
echo  安装提示信息
REM copy /Y FROM_PATH_64 TO_PATH
REM reg IMPORT INSTALL_DRIVER.REG
goto INSTALL_END

:INSTALL32
echo  将为您安装32位程序
echo  安装提示信息
REM copy /Y FROM_PATH_32 TO_PATH
REM reg IMPORT INSTALL_DRIVER.REG
goto INSTALL_END

:INSTALL_END
echo  安装成功提示信息
goto END

:INPUT_UNKNOWN
echo  键入的信息错误,请重试
goto RE_INPUT

:INSTALL_UNKNOWN
echo  未能识别您的系统信息,无法为您安装驱动,您可能需要手动安装
goto END

:END
REM 清理环境变量
echo.
set CHOICE=
pause
# 使用myuid来执行mycmd
# 需要输入密码
runas /noprofile /user:myuid mycmd
# 执行命令时不按enter
# 而是按ctrl+shift+enter
ctrl+shift+enter

AndroidStudio打包so文件

AndroidStudio打包so文件方法如下:
1、将so文件,用下面的文件结构打包为一个zip包,并修改后缀为jar,如armeabi.jar
/lib/armeabi/*.so

2、将armeabi.jar拷贝到项目的libs文件夹下
/your_project/app/libs

3、AndroidStudio会默认将libs下的*.jar一起打包

这样就好啦