一个小demo:从网络上get信息,每隔2秒显示一次。
此demo主要用到了handler的用法和网络通信。网络通信的方式有很多种,在这里选择了okhttp。
以为okhttp3.0较之前改动较大,用okhttp3.9.0的库遇到很多错误(访问超时,无法访问等)所以先改用okhttp2.7.5的库
public class MainActivity extends Activity {
private TextView mTextView;
private ImageView imgShow;
private final String path = "http://60.205.204.0/time.php";
private static final String TAG = "HTest";
private final String path1 = "http://img08.oneniceapp.com/upload/show/2017/11/27/9656e0d4c046e9eb0622be5a06e0f44e.jpg-show.n640.jpg";
private OkHttpClient client;
private String result;
private Request request, request1;
private static final int TEST = 1;
private static final int FALL = 2;
private static final int PICTURE = 3;
private void init() {
client = new OkHttpClient();
mTextView = (TextView) findViewById(R.id.text);
imgShow = (ImageView) findViewById(R.id.imgShow);
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case TEST:
mTextView.setText(result);
Log.d(TAG, "test show");
break;
case PICTURE:
byte[] Picture = (byte[]) msg.obj;
Bitmap bitmap = BitmapFactory.decodeByteArray(Picture, 0, Picture.length);
imgShow.setImageBitmap(bitmap);
break;
case FALL:
Toast.makeText(MainActivity.this, "network failed", Toast.LENGTH_SHORT).show();
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
initSyncData();
initPicData();
}
private void initSyncData() {
new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
request = new Request.Builder().url(path).build();
Response response = client.newCall(request).execute();
result = response.body().string();
Message message = handler.obtainMessage();
message.what = TEST;
handler.sendMessage(message);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
private void initPicData() {
new Thread(new Runnable() {
@Override
public void run() {
try {
request1 = new Request.Builder().url(path1).build();
Response response1 = client.newCall(request1).execute();
byte[] Picture_bt = response1.body().bytes();
//throw handler update UI
Message message = handler.obtainMessage();
message.obj = Picture_bt;
message.what = PICTURE;
handler.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
----------------------------------------------------------------------------------
使用库
-------------------------------------------------------------------------------------------------------------
okhttp和okhttp3的区别
http://blog.csdn.net/u012532559/article/details/52852105