Android,机器狗应用
16lz
2021-12-04
源码如下:
package com.wyl.jqr;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLEncoder;import com.example.tulinjiqiren.R;import com.google.gson.Gson;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.ActionBarActivity;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends ActionBarActivity {Button btn;Button btn2;EditText et;TextView tv;myHandler handler = new myHandler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = (Button)findViewById(R.id.btn01);btn2 = (Button)findViewById(R.id.btn02);et = (EditText)findViewById(R.id.editText01);tv = (TextView)findViewById(R.id.textview02);//用来赋值MyOnclickListener l = new MyOnclickListener();btn.setOnClickListener(l);btn2.setOnClickListener(l);}class MyOnclickListener implements OnClickListener{@Overridepublic void onClick(View view) {if(view.getId()==R.id.btn01){//1.获取录入的问题String question = et.getText().toString();//2.访问网络//主线程不能够访问网络,由此,需要借助开启新线程和handler的方式myThread myThread = new myThread();myThread.start();System.out.println("发送请求的线程:"+Thread.currentThread().getName());}else if(view.getId()==R.id.btn02){//清空edittextSystem.out.println("清楚的线程:"+Thread.currentThread().getName());et.setText("");}}}class myHandler extends Handler{@Overridepublic void handleMessage(Message msg) {String daan = (String)msg.obj;if(daan == "" || daan.equals(null)){daan = "暫時不支持該轉換";}System.out.println("myHandler()方法的线程:"+Thread.currentThread().getName());tv.setText(daan);}}class myThread extends Thread{@Overridepublic void run() {//访问网络System.out.println("run()的线程:"+Thread.currentThread().getName());String APIKEY = "e59219b3f450256c2a3da7157ae651f2"; String INFO; String getURL; URL getUrl; String question = et.getText().toString();//获取前台的问题 try {INFO = URLEncoder.encode(question, "utf-8");//需要改造getURL = "http://www.tuling123.com/openapi/api?key=" + APIKEY + "&info=" + INFO; getUrl = new URL(getURL); HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection(); connection.connect(); // 取得输入流,并使用Reader读取 BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), "utf-8")); StringBuffer sb = new StringBuffer(); String line = ""; while ((line = reader.readLine()) != null) { sb.append(line); } reader.close(); // 断开连接 connection.disconnect(); System.out.println("获取到的答案"+sb); //sb是json格式的,需要做轉化, Gson gson = new Gson(); String sb2 = sb.toString(); System.out.println("sb2的值:"+sb2); myBean rtn = gson.fromJson(sb2, myBean.class); System.out.println("rtn的值:"+rtn); String text = rtn.getText(); System.out.println("text的值:"+text); //因为本线程workThread,不能够直接把值返回到UI中,所以把答案放到队列里, Message msg = handler.obtainMessage(); msg.obj = text;//把轉化後的答案綁定到msg上 handler.sendMessage(msg);} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} }}}
myBean.java
因为用到了Gson来解析,所以根据返回的json字符串的key来写一个bean。
package com.wyl.jqr;public class myBean {String code;String text;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getText() {return text;}public void setText(String text) {this.text = text;}}
更多相关文章
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
- 获取Android(安卓)Device的信息
- 九宫格
- android获取本地视频路径
- Android(安卓)中的 Looper 对象
- 线程池的封装和使用(二)
- Android(安卓)Battery一些信息获取方法
- Android中对后台任务线程性能的说明及优化
- Android(安卓)studio 简单的多线程