本地Apache服务器配置及Android模拟器的调试


按照这个配置就可以( 删除一般会删除不干净,所以尽量不要删除。

(这个一般用不到) http://kazake.blog.51cto.com/2155462/737847

下载的是最新的Apache,参考第一个连接下载的。
这样就配置好了!!!



2.OKHttp连接服务器,服务器本机地址为:https://127.0.0.1 

    
    在将get_data.json放置到合适的位置后为:


postman的运行结果:



重点强调:模拟器与本机IP地址不一样。

 模拟器IP为:https://10.0.2.2/get_data.json
如果这个没设置对,是无法实现连接的。


还有一点需要强调,使用OKHttp访问https类型的网站需要设置证书,这里我参考别人的代码实现的,最后顺利跑通,忙了一整天,各种坑都踩了。
 ssl证书参考博客:http://blog.csdn.net/okmin3/article/details/53585743


代码如下:
package fengjw.com.httpdemo ;

import android.support.v7.app.AppCompatActivity ;
import android.os.Bundle ;
import android.util.Log ;
import android.view.View ;
import android.widget.Button ;
import android.widget.TextView ;


import org.json.JSONArray ;
import org.json.JSONObject ;

import java.io.IOException ;
import java.security.SecureRandom ;
import java.security.cert.X509Certificate ;

import javax.net.ssl.HostnameVerifier ;
import javax.net.ssl.SSLContext ;
import javax.net.ssl.SSLSession ;
import javax.net.ssl.SSLSocketFactory ;
import javax.net.ssl.TrustManager ;
import javax.net.ssl.X509TrustManager ;

import okhttp3.OkHttpClient ;
import okhttp3.Request ;
import okhttp3.Response ;

public class OKHttpActivity extends AppCompatActivity implements View.OnClickListener{


private TextView text_response ;
private String url = " https://10.0.2.2/get_data.json" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
setContentView(R.layout. activity_okhttp) ;
Button btn_request = (Button) findViewById(R.id. btn_okrequest) ;
text_response = (TextView) findViewById(R.id. text_okresponse) ;
btn_request.setOnClickListener( this) ;
}

@Override
public void onClick(View view) {
if (view.getId() == R.id. btn_okrequest){
sendRequestWithOKHttp() ;
}
}

private void sendRequestWithOKHttp(){
new Thread( new Runnable() {
@Override
public void run() {
try{
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(createSSLSocketFactory())
.hostnameVerifier( new TrustAllHostnameVerifier())
.build() ;
Request request = new Request.Builder().url( url).build() ;
Log. d( "fengjw" , "request: " + request.toString()) ;
Response response = client.newCall(request).execute() ;
Log. d( "fengjw" ,response.toString()) ;
String responseData = null;
if (response.isSuccessful()){
responseData = response.body().string() ;
} else {
throw new IOException( "Unexpected code " + response) ;
}
Log. d( "fengjw" , responseData) ;
//showResponse(responseData);
parseJSONWithJSONObject(responseData) ;
} catch (Exception e){
e.printStackTrace() ;
}
}
}).start() ;
}

private void parseJSONWithJSONObject(String jsonData){
try{
JSONArray jsonArray = new JSONArray(jsonData) ;
for ( int i = 0 ; i < jsonArray.length() ; i ++){
JSONObject jsonObject = jsonArray.getJSONObject(i) ;
String id = jsonObject.getString( "id") ;
Log. d( "fengjw" , "Id: " + id) ;
String version = jsonObject.getString( "version") ;
Log. d( "fengjw" , "version : " + version) ;
String name = jsonObject.getString( "name") ;
Log. d( "fengjw" , "name: " + name) ;
}
} catch (Exception e){
e.printStackTrace() ;
}
}

private void showResponse( final String responseData){
runOnUiThread( new Runnable() {
@Override
public void run() {
text_response.setText( responseData) ;
}
}) ;

}


class TrustAllCerts implements X509TrustManager {

@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] x509Certificates , String s) throws java.security.cert.CertificateException {

}

@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] x509Certificates , String s) throws java.security.cert.CertificateException {

}

public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[ 0] ;}
}
private static class TrustAllHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname , SSLSession session) {
return true;
}
}


private SSLSocketFactory createSSLSocketFactory() {
SSLSocketFactory ssfFactory = null;

try {
SSLContext sc = SSLContext. getInstance( "TLS") ;
sc.init( null, new TrustManager[] { new TrustAllCerts() } , new SecureRandom()) ;

ssfFactory = sc.getSocketFactory() ;
} catch (Exception e) {
}

return ssfFactory ;
}

}














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值