我为Android编写应用程序,我有一个问题。它适用于手机,但它不适用于平板电脑。 我有错误:http连接android.os.networkonmainthreadexception错误。这是我的代码:
公共课AktualizacjaActivity { public static final String KEY_121 =“http://xxx.php”;
public String getServerData(String returnString,Context context) {
DatabaseAdapter db1 = new DatabaseAdapter(context);
db1.open();
String question="";
try
{
Cursor c = db1.makeCursor(DatabaseAdapter.STRUCT, new String[] {DatabaseAdapter.ID},DatabaseAdapter.KODE_ID+"='"+returnString+"'",null);
c.moveToFirst();
question+="NOT IN('";
while(!c.isLast())
{
question+=c.getString(c.getColumnIndex(DatabaseAdapter.ID))+"','";
c.moveToNext();
}
question+=c.getString(c.getColumnIndex(DatabaseAdapter.ID))+"')";
}
catch(Exception e)
{
}
db1.close();
if(question.equalsIgnoreCase("NOT IN('")) question="";
InputStream is = null;
String result = "";
//the year data to send, warunek rok większy od 1980
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("code_id",returnString));
nameValuePairs.add(new BasicNameValuePair("no", question));
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(KEY_121);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
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());
}
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"ISO-8859-2"),8);
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 json data
DatabaseAdapter db = new DatabaseAdapter(context);
db.open();
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
db.addItmem("INSERT INTO my_kodeks_struktura VALUES("
+json_data.getInt("id")+","
+json_data.getInt("code_id")+","+
json_data.getInt("position_art")+",'"+
json_data.getString("position_art_a")+"',"+
json_data.getInt("level")+",'"+
json_data.getString("name")+"');");
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
db.close();
return "Upd";
}
}
答案 0 :(得分:2)
正如异常所说:你不能在ui线程上进行http调用。至少不是在新的操作系统上。
考虑使用AsyncTask进行此类调用。