線程加載獲得json對象
1 //線程中或intentService加載執行請求 2 3 4 package com.example.administrator.mylogin; 5 import android.app.IntentService; 6 import android.content.Intent; 7 import android.content.Context; 8 import android.util.Log; 9 import android.widget.Toast; 10 import com.example.administrator.mylogin.Dao.dao; 11 import com.example.administrator.mylogin.Dao.imol.LoginImpl; 12 import java.util.HashMap; 13 import java.util.Map; 14 public class MyIntentService extends IntentService { 15 16 final String KEY="http://api.dongman.fm/account/loginByAccountAndPwd"; 17 public MyIntentService() { 18 super("MyIntentService"); 19 } 20 21 @Override 22 protected void onHandleIntent(Intent intent) { 23 dao dao= new LoginImpl(); 24 String user=intent.getStringExtra("username"); //獲得參數 25 String pswd=intent.getStringExtra("password"); //獲得參數 26 27 Map map= new HashMap<String,String>(); //設置map 28 map.put("account",user); //傳入參數 29 map.put("password",pswd); 30 String json=dao.postDownloadJson(KEY,map); //填寫URL 和請求參數 31 32 Log.i("Json",json); 33 } 34 35 }
發送Post請求實現方法
1 package com.example.administrator.mylogin.Dao.imol; 2 3 import android.util.Log; 4 5 import com.example.administrator.mylogin.Dao.dao; 6 import com.example.administrator.mylogin.model.user; 7 8 import org.json.JSONException; 9 import org.json.JSONObject; 10 11 import java.io.BufferedInputStream; 12 import java.io.BufferedReader; 13 import java.io.ByteArrayOutputStream; 14 import java.io.DataOutputStream; 15 import java.io.IOException; 16 import java.io.InputStream; 17 import java.io.InputStreamReader; 18 import java.io.PrintWriter; 19 import java.net.HttpURLConnection; 20 import java.net.MalformedURLException; 21 import java.net.URL; 22 import java.net.URLEncoder; 23 import java.util.HashMap; 24 import java.util.Map; 25 26 /** 27 * Created by Administrator on 2017/12/5. 28 */ 29 30 31 /** 32 * 獲取登錄的json 33 */ 34 public class LoginImpl implements dao { 35 @Override 36 public String postDownloadJson(String path, Map<String, String> keyAndValues) { 37 URL url = null; //url 38 HttpURLConnection conn=null; 39 ByteArrayOutputStream baos = null; 40 try { 41 url = new URL(path); //對象創建 42 conn= (HttpURLConnection) url.openConnection(); //創建鏈接對象,強轉對象打開鏈接 43 conn.setRequestMethod("POST"); //設置請求類型(大寫) 44 // conn.setConnectTimeout(10000); //連接超時 單位毫秒 45 // conn.setReadTimeout(2000); //讀取超時 單位毫秒 46 47 conn.setUseCaches(false); 48 // 發送POST請求必須設置如下兩行 49 conn.setDoInput(true); 50 conn.setDoOutput(true); 51 //application/x-javascript text/xml->xml數據 application/x-javascript->json對象 application/x-www-form-urlencoded->表單數據 52 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 53 conn.connect(); //打開連接 54 //獲取url對應的輸出流 55 PrintWriter print = new PrintWriter(conn.getOutputStream());//設置輸出流 56 StringBuilder builder = new StringBuilder(); //用map設置key值 57 for (Map.Entry<String, String> entry : keyAndValues.entrySet()) { 58 builder.append(entry.getKey()); 59 builder.append("="); 60 builder.append(entry.getValue()); 61 builder.append("&"); 62 } 63 builder.substring(0, builder.length() - 1); //不顯示最后一個& 64 String parameters = URLEncoder.encode(builder.toString(), "UTF-8"); 65 66 print.write(parameters); //設置key 發出請求 67 // flush輸出流的緩沖 68 print.flush(); 69 70 //開始獲得數據 71 InputStream bis = conn.getInputStream(); //獲得輸出流 72 baos = new ByteArrayOutputStream(); 73 int len; 74 75 byte[] b = new byte[2048]; 76 while ((len = bis.read(b)) != -1) { 77 baos.write(b, 0, len); 78 } 79 baos.flush(); 80 return new String(baos.toByteArray()); //返回字符串 81 82 } catch (IOException e) { 83 e.printStackTrace(); 84 } finally { 85 try { 86 if (baos != null) baos.close(); 87 } catch (IOException e) { 88 e.printStackTrace(); 89 }finally { 90 if(conn!=null){ 91 conn.disconnect(); //關閉連接 92 } 93 } 94 } 95 return null; 96 } 97 98 @Override 99 public user postUserLoginInfo(String json) { 100 JSONObject jsonObg; 101 user user = new user(); 102 try { 103 jsonObg = new JSONObject(json); 104 jsonObg.getString("message"); 105 JSONObject jsonDate = jsonObg.getJSONObject("data"); 106 user.setAvatar_url(jsonDate.getString("avatar_url")); 107 user.setName(jsonDate.getString("name")); 108 user.setToken(jsonDate.getString("refresh_token")); 109 } catch (JSONException e) { 110 e.printStackTrace(); 111 } 112 return user; 113 } 114 116 public void aaa() { 117 Map kvMap = new HashMap<String, String>(); 118 kvMap.put("username", "aaa"); 119 kvMap.put("password", "123"); 120 postDownloadJson("http://baidu.com", kvMap); 121 } 122 123 public void readContentFromPost() throws IOException { 124 // Post請求的url,與get不同的是不需要帶參數 125 URL postUrl = new URL("http://api.dongman.fm/account/loginByAccountAndPwd"); 126 // 打開連接 127 HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection(); 128 129 // 設置是否向connection輸出,因為這個是post請求,參數要放在 130 // http正文內,因此需要設為true 131 connection.setDoOutput(true); 132 // Read from the connection. Default is true. 133 connection.setDoInput(true); 134 // 默認是 GET方式 135 connection.setRequestMethod("POST"); 136 137 // Post 請求不能使用緩存 138 connection.setUseCaches(false); 139 140 connection.setInstanceFollowRedirects(true); 141 142 // 配置本次連接的Content-type,配置為application/x-www-form-urlencoded的 143 // 意思是正文是urlencoded編碼過的form參數,下面我們可以看到我們對正文內容使用URLEncoder.encode 144 // 進行編碼 145 connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 146 // 連接,從postUrl.openConnection()至此的配置必須要在connect之前完成, 147 // 要注意的是connection.getOutputStream會隱含的進行connect。 148 connection.connect(); 149 DataOutputStream out = new DataOutputStream(connection 150 .getOutputStream()); 151 // The URL-encoded contend 152 // 正文,正文內容其實跟get的URL中 '? '后的參數字符串一致 153 String content = "account=" + URLEncoder.encode("123@qq.com", "UTF-8"); 154 content +="&password="+URLEncoder.encode("1", "UTF-8");; 155 // DataOutputStream.writeBytes將字符串中的16位的unicode字符以8位的字符形式寫到流里面 156 out.writeBytes(content); 157 158 out.flush(); 159 out.close(); 160 161 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 162 String line; 163 164 while ((line = reader.readLine()) != null){ 165 Log.i("Log-----------",line); 166 } 167 168 reader.close(); 169 connection.disconnect(); 170 } 171 172 }