さて、ここでは、私はWeb URLからHTTP(ポスト)データを要求するアプリケーションをコーディングしました。データはJSon配列を使用して返され、それらの配列を解析して必要なものを取得します。HTTP POST要求アンドロイド4(2.3で動く)?
アンドロイド2.3.xを使用しても問題はありませんが、Android 4でテストすると全く動作しません。ここで
は私のコードです:
public boolean testConexio(){
boolean status = false;
String rutaServer = "URL.php";
//Log.e("log_tag", "Ruta server: "+rutaServer);
InputStream is = null;
String result = "";
String temporal;
//Valors a demanar/enviar
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("param1",config.getUserDB())); // parametros POST!
nameValuePairs.add(new BasicNameValuePair("param2",config.getPassDB())); // parametros POST!
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(rutaServer);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8")); // valors POST UTF 8 coded <-- I KNOW! this is the way i need them spanishfag here
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
//Convierte la respuesta a String
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8); // again, spanishfag here
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
//Parse la respuesta JSon
try{
JSONObject jArray = new JSONObject(result);
temporal = jArray.getString("status");
if(temporal.equals("true")){
status = true;
}
Log.i("log_tag","Status: "+jArray.getString("status"));
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
return status;
}
誰も私が間違ってやっているものを私に伝えることができますか?または私が変更する必要があるもの、私は少し今探していて、私はアンドロイド4で動作させることはできません。
ありがとう!
あなたは 'android.os.NetworkOnMainThreadException'を受け取ったと仮定します...あなたはメインスレッドでインターネット操作を行うべきではありません...スレッドを使う(fx .: AsyncTask) – Selvin
AsyncTaskそれが役立つかどうかを調べるには、答え[ここ](http://stackoverflow.com/questions/8706464/defaulthttpclient-to-androidhttpclient/8706961#8706961)を参照してください。 – yorkw
@yorkwその答えは本当に本当に本当に悪いことですが、非同期タスクでそれを行う方が100%良いでしょう。 – FabianCook