1

重複の可能性:
AndroidアプリはAndroid4では機能しません

私はAndroidアプリに取り組んでいます。何時間も解決策を見つけようとしています。エミュレーター2.3.3を実行している場合、アプリはデータベースとサーバーで正常に動作しますが、4.0、4.1、または2.3.3以降のバージョンでは動作しません。アプリはこのメソッドで例外をスローします。例外は、実行しようとすると発生しconnection.connect();ます。助けてください。

public void sendOutputLine(URL url, String outputLine) {
    try {
        connection = (HttpURLConnection) url.openConnection();
        Log.d(LogInActivity.DEBUG_TAG, "1");
        connection.setDoInput(true);
        Log.d(LogInActivity.DEBUG_TAG, "2");    
        connection.setDoOutput(true);
        Log.d(LogInActivity.DEBUG_TAG, "3");    
        connection.setRequestMethod("POST");
        Log.d(LogInActivity.DEBUG_TAG, "4");    
        connection.setFixedLengthStreamingMode(outputLine.length());
        Log.d(LogInActivity.DEBUG_TAG, "5");    
        connection.connect();
        Log.d(LogInActivity.DEBUG_TAG, "6");    
        out = connection.getOutputStream();
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
        pw.print(outputLine);
        pw.flush();
        out.close();
    } catch (SocketTimeoutException e) {
        Log.d(LogInActivity.DEBUG_TAG,
                "SocketTimeoutException sendOutputLine(): " + e.getMessage());          
    } catch (ProtocolException e) {
        Log.d(LogInActivity.DEBUG_TAG,
                "Protocol exception sendOutputLine(): " + e.getMessage());
    } catch (IOException e) {
        Log.d(LogInActivity.DEBUG_TAG, "IO exception sendOutputLine(): "
                + e.getMessage());
    } catch (Exception e) {
        Log.d(LogInActivity.DEBUG_TAG,
                "Exception bommed client: " + e.getMessage());  
    }
}

Logcat:

11-17 13:19:11.710: D/SocialFamilyTree(847): outputLint: Login%a@a%57963634
11-17 13:19:11.710: D/SocialFamilyTree(847): 1
11-17 13:19:11.710: D/SocialFamilyTree(847): 2
11-17 13:19:11.710: D/SocialFamilyTree(847): 3
11-17 13:19:11.710: D/SocialFamilyTree(847): 4
11-17 13:19:11.710: D/SocialFamilyTree(847): 5
11-17 13:19:11.740: D/SocialFamilyTree(847): Exception bommed client: null

編集:なるほど、使用する必要がありますAsyncTask

AsyncTaskこのタスクにを使用するにはどうすればよいですか?

4

2 に答える 2

0

この方法で AsyncTask を使用します...

public class getConnection extends AsyncTask<String, Void, Void> 
    {


           @Override
            protected void onPreExecute() 
           {
               super.onPreExecute();
               Utils.clearDialogs();
               Utils.showActivityViewer(Mainctivity.this);
           }

           @Override
           protected Void doInBackground(String... arg0)
           {

            try 
            {
                   connection = (HttpURLConnection) url.openConnection();

                   Log.d(LogInActivity.DEBUG_TAG, "1");
                   connection.setDoInput(true);
                   Log.d(LogInActivity.DEBUG_TAG, "2");    
                   connection.setDoOutput(true);
                   Log.d(LogInActivity.DEBUG_TAG, "3");    
                   connection.setRequestMethod("POST");
                   Log.d(LogInActivity.DEBUG_TAG, "4");    
                   connection.setFixedLengthStreamingMode(outputLine.length());
                   Log.d(LogInActivity.DEBUG_TAG, "5");    
                   connection.connect();
                   Log.d(LogInActivity.DEBUG_TAG, "6");    
                   out = connection.getOutputStream();
                   PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
                   pw.print(outputLine);
                   pw.flush();
                   out.close();
            } 
            catch (Exception e) 
            {
             e.printStackTrace();
            }

            return null;
           }

           @Override
           protected void onPostExecute(Void result)
           {
               super.onPostExecute(result);
               Utils.hideActivityViewer();

            }
            catch (Exception e)
            {
             Log.v("log", e.toString());
            }
           }

          }
于 2012-11-17T19:19:14.437 に答える
0

やみくもに例外をキャッチしないでください。エラーを隠すことで、問題全体を隠しています。おそらくバックグラウンド スレッドで実行されていないため、NetworkOnMainThreadException が発生していると推測できますが、提供された情報からは判断できません。

AsyncTask は NetworkOnMainThreadException 問題を解決するための 1 つのアプローチですが、それが唯一のアプローチではなく、それが実際の問題であるという証拠はありません。

于 2012-11-17T19:33:43.293 に答える