我正在尝试编写一个简单的Android应用程序来帮助我更快更轻松地登录锻炼。
我用python做了一个POC:
import httplib
conn = httplib.HTTPConnection("whitecity.wodsignup.com")
conn.request("GET","/act.php?act=joinWOD&time=1422712800&type=wod&user=791723491%2CGil+Alin")
res = conn.getresponse()
print res.status, res.reason
我从服务器获得的结果是200 OK
,并且它工作正常(工作=签署我要求的锻炼)
现在棘手的部分 - 我创建了以下应用程序:
package com.example.httpreqsample;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
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.app.Activity;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
TextView etResponse;
TextView tvIsConnected;
Button go;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// get reference to the views
etResponse = (TextView) findViewById(R.id.etResponse);
tvIsConnected = (TextView) findViewById(R.id.tvIsConnected);
go = (Button) findViewById(R.id.go);
go.setOnClickListener(this);
// check if you are connected or not
if(isConnected()){
tvIsConnected.setBackgroundColor(0xFF00CC00);
tvIsConnected.setText("You are conncted");
}
else{
tvIsConnected.setText("You are NOT conncted");
tvIsConnected.setBackgroundColor(Color.RED);
}
// show response on the EditText etResponse
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
// calling the GET via Button
//etResponse.setText(GET("whitecity.wodsignup.com/act.php?act=joinWOD&time=1422412800&type=wod&user=791723491%2CGil+Alin"));
}
public static String GET(String url){
InputStream inputStream = null;
String result = "";
try {
// create HttpClient
HttpClient httpclient = new DefaultHttpClient();
// make GET request to the given URL
HttpResponse httpResponse = httpclient.execute(new HttpGet(url));
// receive response as inputStream
inputStream = httpResponse.getEntity().getContent();
// convert inputstream to string
if(inputStream != null)
result = convertInputStreamToString(inputStream);
else
result = "Did not work!";
} catch (Exception e) {
Log.d("InputStream", e.getLocalizedMessage());
}
return result;
}
// convert inputstream to String
private static String convertInputStreamToString(InputStream inputStream) throws IOException{
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null)
result += line;
inputStream.close();
return result;
}
// check network connection
public boolean isConnected(){
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected())
return true;
else
return false;
}
@Override
public void onClick(View v) {
etResponse.setText(GET("http://whitecity.wodsignup.com/act.php?act=joinWOD&time=1422412800&type=wod&user=791723491%2CGil+Alin"));
}
}
我能够与服务器通信,并收到以下结果:
{"code":200,"message":"Removed from lesson"}
或
{"code":201,"message":"All good"}
每次我发送GET请求时,在两者之间交替。
问题是Android解决方案似乎并没有真正起作用。 它从站点发送和接收数据,但并不像Python解决方案那样真正签约
任何想法为什么这两种方法都不会产生相同的结果?
答案 0 :(得分:0)
我认为两种解决方案都可行。它就像那样的网站脚本。
请求在{"code":200,"message":"Removed from lesson"}
和{"code":201,"message":"All good"}
之间切换,可能会在删除和订阅课程之间切换
只需转到http://whitecity.wodsignup.com/act.php?act=joinWOD&time=1422412800&type=wod&user=791723491%2CGil+Alin
并刷新网站几次,即可在任何浏览器中进行检查