0

我为 android 编写了应用程序,但我遇到了一个问题。它适用于手机,但不适用于平板电脑。我有错误:http 连接错误 android.os.networkonmainthreadexception。这是我的代码:

公共类 AktualizacjaActivity { 公共静态最终字符串 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"; 

}    



}
4

1 回答 1

2

正如例外所说:您不能在 ui 线程上进行 http 调用。至少不在较新的操作系统上。

考虑使用 AsyncTask 进行此类调用。

于 2012-04-18T11:45:10.450 回答