Andrioid项目之九图灵机器人

Andrioid项目之九图灵机器人

要实现一个图灵机器人,首先需要在 http://www.tuling123.com/ 中注册,然后创建一个应用,

便可通过应用的API key使用图灵机器人。图灵机器人非常方便的一点是不需要添加额外的库类。

只需要get请求访问 http://www.tuling123.com/openapi/api 就可以获得json数据,

然后对json数据进行解析即可。

下面就用Json解析一下数据

Json解析格式:

一、 JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧,属于轻量级解析。

Json建构于两种结构:
1、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 如: 
{
“name”:”jackson”,
“age”:100
}


2、值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)如:
{
“students”:
[
{“name”:”jackson”,“age”:100},
{“name”:”michael”,”age”:51}
]
}

下面具体来看一下图灵机器人的具体实现:

一:创建接口HttpGetData

<span style="font-size:14px;">package com.example.rootpeople1;

public interface HttpGetData {
	void getDataUrl(String data);
}
</span>


二:创建HttpData.java

package com.example.rootpeople1;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.AsyncTask;

public class HttpData extends AsyncTask<String, Void, String> {
	private HttpClient httpClient;
	private HttpGet  httpGet;
	private String url;
	private HttpResponse httpResponse;
	private HttpEntity httpEntity;
	private InputStream in;
	private HttpGetData listener;
	//请求的urL
	 public HttpData(String url,HttpGetData listener) {
			this.url=url;
			this.listener=listener;
		}
	@Override
	protected String doInBackground(String... params) {
		try {
			httpClient=new DefaultHttpClient();
			httpGet=new HttpGet(url);
			httpResponse=httpClient.execute(httpGet);
			httpEntity=httpResponse.getEntity();
			in=httpEntity.getContent();//获取实体内容
			BufferedReader br=new BufferedReader(new InputStreamReader(in));
			String line=null;
			StringBuffer sb=new StringBuffer();
			while ((line=br.readLine())!=null) {
				sb.append(line);				
			}
          return sb.toString();
		} catch (Exception e) {
			// TODO: handle exception
		}
		return null;
	}
	@Override
	protected void onPostExecute(String result) {
		// TODO Auto-generated method stub6
	listener.getDataUrl(result);
		super.onPostExecute(result);
	}

}

三:创建ListData.java
 

package com.example.rootpeople1;

public class ListData {
	private String content;
	public static final  int send=1;
	public static final  int  receiver=2;
	private int flag;
	private String time;
	public String getTime() {
		return time;
	}

	public void setTime(String time) {
		this.time = time;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public int getFlag() {
		return flag;
	}

	public void setFlag(int flag) {
		this.flag = flag;
	}

	public ListData(String content, int flag,String time) {
		super();
		setContent(content);
		setFlag(flag);
		setTime(time);
		
	}
	
	
}

四:TextAdapter.java
 

package com.example.rootpeople1;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;



public class TextAdapter  extends BaseAdapter{
	private List<ListData> lists;
	private Context  mContext;
	private RelativeLayout layout;
	
	
	public TextAdapter(List<ListData> lists, Context mContext) {
	
		this.lists = lists;
		this.mContext = mContext;
	}

	public int getCount() {
		// TODO Auto-generated method stub
		return lists.size();
	}

	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return lists.get(position);
	}

	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		LayoutInflater  inflater=LayoutInflater.from(mContext);
		if(lists.get(position).getFlag()==ListData.receiver){
			layout=(RelativeLayout) inflater.inflate(R.layout.leftitem, null);
		}
		if(lists.get(position).getFlag()==ListData.send){
			layout=(RelativeLayout) inflater.inflate(R.layout.rightem, null);
		}
		TextView tv = (TextView) layout.findViewById(R.id.tv);
		TextView time= (TextView) layout.findViewById(R.id.time);
		time.setText(lists.get(position).getTime());
		tv.setText(lists.get(position).getContent());
		return layout;
	}

}

五:测试MainActivity.java
 

package com.example.rootpeople1;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;



public class MainActivity extends Activity implements HttpGetData,OnClickListener {
	private HttpData  httpdata;
	private List<ListData> list;
	private ListView lv;
	private Button  send_btn;
	private EditText sendtext;
	private String content_str;
	private TextAdapter adapter;
	private String [] welcomeArray;
	private double currenttime,oldTime=0;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initeview();
	}
	private void initeview(){
		list=new ArrayList<ListData>();
		lv=(ListView) findViewById(R.id.lv);
		send_btn=(Button) findViewById(R.id.send_btn);
		sendtext=(EditText) findViewById(R.id.senText);
		send_btn.setOnClickListener(this);	
		adapter=new TextAdapter(list,this);
		lv.setAdapter(adapter);
		ListData listData = null;
		listData=new ListData(getRandomWelcomeTips(), listData.receiver,getTime());
		System.out.println("时间"+listData);
		list.add(listData);
		
	}

	public void getDataUrl(String data) {
		// TODO Auto-generated method stub
		parseText(data);
	}
	public void parseText(String str){
		
		try {
			JSONObject jb=new JSONObject(str);
			/*System.out.println(jb.getString("code"));
			System.out.println(jb.getString("text"));*/
			ListData listData = null;
			listData=new ListData(jb.getString("text"),listData.receiver,getTime());
			System.out.println("时间"+listData);
			list.add(listData);
			adapter.notifyDataSetChanged();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	public void onClick(View v) {
		content_str=sendtext.getText().toString();
		sendtext.setText("");
		String dropk=content_str.replace(" ", "");
		String droph=dropk.replace("\n", "");
		ListData  listdata = null;
		listdata=new ListData(content_str,listdata.send,getTime());
		System.out.println("sfds"+listdata);
		list.add(listdata);
		if(list.size()>30){
			for(int i=0;i<list.size();i++){
				list.remove(i);
			}
		}
		adapter.notifyDataSetChanged();
		httpdata=(HttpData) new HttpData(
				"http://www.tuling123.com/openapi/api?key=5a4b5c8bbf2c8a9dd02861999fa0d45c&info="+droph,this).execute();
		
	}
	private String  getRandomWelcomeTips(){
		String welcome_tipe=null;
		welcomeArray=this.getResources().getStringArray(R.array.welcome_tips);
		int  index=(int) (Math.random()*(welcomeArray.length-1));
		welcome_tipe=welcomeArray[index];
		return welcome_tipe;
	}
	private String  getTime(){
		currenttime-=System.currentTimeMillis();
		SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		//SimpleDateFormat format=new SimpleDateFormat("HH:mm");
		Date curdata=new Date();
		String str=format.format(curdata);
		if(currenttime - oldTime >=5*60*1000){
			oldTime=currenttime;
			return  str;
		}else{
			return "";
		}
			
		
	}
}

UI布局文件
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/lv"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:divider="@null"
        android:listSelector="@android:color/transparent"
        android:transcriptMode="alwaysScroll" >
    </ListView>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/senText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" 
              android:background="@android:drawable/edit_text"
              />

        <Button
            android:id="@+id/send_btn" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/send"
 
            />
    </LinearLayout>

</LinearLayout>

leftitem.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/time"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/time"
        android:layout_marginLeft="45dp"
        android:layout_marginTop="55dp"
        android:background="@drawable/aio_friend_bg_nor_11"
        android:gravity="center" />

    <com.makeramen.roundedimageview.RoundedImageView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/iv"
            android:layout_width="60dp"
            android:layout_height="60dp"          
            android:gravity="center_horizontal"
            android:src="@drawable/test_photo"
            app:riv_border_color="#333333"
            app:riv_border_width="3dip"
            app:riv_corner_radius="10dip"
            app:riv_mutate_background="true"
            app:riv_oval="true" />

</RelativeLayout>

rightem.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
   >
     <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:id="@+id/time"
        
        />
    
    <TextView 
         android:layout_below="@id/iv"
        android:layout_marginLeft="55dp"
        android:layout_toLeftOf="@id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv"
        android:background="@drawable/aio_user_bg_nor_11"
        android:gravity="center"
        />

    <com.makeramen.roundedimageview.RoundedImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/iv"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/time"
        android:src="@drawable/picture"
        app:riv_border_color="#333333"
        app:riv_border_width="3dip"
        app:riv_corner_radius="10dip"
        app:riv_mutate_background="true"
        app:riv_oval="true" />

</RelativeLayout>

最终运行界面:

 

 

 

发布了308 篇原创文章 · 获赞 2 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览