android studio 2.3.3
java 16.0.1
需要准备的jar包:json-lib-2.4-kdj15.jar
第一步:拷贝需要用到的jar包到项目目录的app/libs路径下。
第二步:添加依赖。
方法一:通过界面操作 File->Project Structure->app->Dependencies
添加依赖,在libs中找到需要添加的jar包,依次添加(每次只能添加一个)
方法二: 手动添加compile files(‘libs/commons-beanutils-1.7.0.jar’)
需要用到网络,在AndroidMainfest.xml中添加
,位置如下图:
周公解梦:https://www.jisuapi.com/api/dream/
网站提供的有java实例
数据返回的格式内容:
提供好的代码:https://www.jisuapi.com/code/dream/,大家可根据需要下载并使用。
界面
java代码:
由于android 4 之后,不允许把耗时操作放在主线程中运行,我们在获取网络请求的时候,应该把请求放在线程中进行。下面为线程类的代码:
package com.example.surface.getwebdata;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.net.URLEncoder;
public class MainActivity extends AppCompatActivity {
private TextView tv_result;
private Button btn_send;
private EditText et_keyword;
class Threads_get extends Thread {
public static final String APPKEY = " 76de6495d1cce7bc"; // 你的appkey
public static final String URL = "https://api.jisuapi.com/dream/search";
public String keyword = "船"; // utf-8
public String Get() throws Exception {
String result = "";
keyword = String.valueOf(et_keyword.getText());
String url = URL + "?appkey=" + APPKEY + "&keyword=" + URLEncoder.encode(keyword, "utf-8");
try {
result = HttpUtil.sendGet(url, "utf-8");
JSONObject json = JSONObject.fromObject(result);
if (json.getInt("status") != 0) {
System.out.println(json.getString("msg"));
} else {
result = "";
JSONArray resultarr = json.optJSONArray("result");
for (int i = 0; i < resultarr.size(); i++) {
JSONObject obj = (JSONObject) resultarr.opt(i);
String name = obj.getString("name");
String content = obj.getString("content");
result = result + name + content;
System.out.println(name + " " + content);
}
return result;
}
} catch (Exception e) {
e.printStackTrace();
return result;
}
return result;
}
@Override
public void run() {
try {
setUi_get(Get());
// tv_result.setText(Get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_result = (TextView)findViewById(R.id.tv_result);
btn_send = (Button)findViewById(R.id.btn_send);
et_keyword = (EditText)findViewById(R.id.et_keyword);
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Threads_get se = new Threads_get();
se.start();
}
});
}
运行结果:点击一次发送,界面没有反应,第二词点击发送按钮,有结果显示。分析原因:数据正常获取后,没有及时刷新到页面上。
请求到的数据,使用匿名内部类,实现runOnUiThread中的run方法,在run方法中设置界面显示的内容。
public class MainActivity extends AppCompatActivity {
private TextView tv_result;
private Button btn_send;
private EditText et_keyword;
class Threads_get extends Thread {
public static final String APPKEY = " 76de6495d1cce7bc"; // 你的appkey
public static final String URL = "https://api.jisuapi.com/dream/search";
public String keyword = "船"; // utf-8
public String Get() throws Exception {
String result = "";
keyword = String.valueOf(et_keyword.getText());
String url = URL + "?appkey=" + APPKEY + "&keyword=" + URLEncoder.encode(keyword, "utf-8");
try {
result = HttpUtil.sendGet(url, "utf-8");
JSONObject json = JSONObject.fromObject(result);
if (json.getInt("status") != 0) {
System.out.println(json.getString("msg"));
} else {
result = "";
JSONArray resultarr = json.optJSONArray("result");
for (int i = 0; i < resultarr.size(); i++) {
JSONObject obj = (JSONObject) resultarr.opt(i);
String name = obj.getString("name");
String content = obj.getString("content");
result = result + name + content;
System.out.println(name + " " + content);
}
return result;
}
} catch (Exception e) {
e.printStackTrace();
return result;
}
return result;
}
@Override
public void run() {
try {
setUi_get(Get());
// tv_result.setText(Get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_result = (TextView)findViewById(R.id.tv_result);
btn_send = (Button)findViewById(R.id.btn_send);
et_keyword = (EditText)findViewById(R.id.et_keyword);
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Threads_get se = new Threads_get();
se.start();
}
});
}
public void setUi_get(final String response){
// 此处格外注意,更新UI要在主线程里操作。此处为异步线程
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_result.setText(response);
}
});
}
}



