2016-08-18 12 views
0

このアプリケーションでは、ユーザー名とパスワードがURLのユーザー名とパスワードと一致する場合にのみログインできるログインページを作成しましたが、応答では空の文字列が表示され、タイムアウトエラーの例外をキャッチします。ここにコードがあります。URLに接続中にタイムアウトエラーが発生しました

public class MainActivity extends AppCompatActivity { 
     Button button; 
     String connectionString, params; 
     PackageManager pm; 
     SharedPreferences preferences; 
     DatabaseHelper mydb; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      final EditText username = (EditText) findViewById(R.id.editText); 
      final EditText password = (EditText) findViewById(R.id.editText2); 
      Button button = (Button) findViewById(R.id.button1); 
      button.setOnClickListener((new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (v.getId() == R.id.button1) { 
         String userNameString = username.getText().toString(); 
         String passwordString = password.getText().toString(); 
         String url = "http://122.160.78.189:85/mobile/loginUser?"; 
          String params = null; 
         try { 
          params = "userName=" + URLEncoder.encode(userNameString, "UTF-8") + "&password=" + URLEncoder.encode(passwordString, "UTF-8") + "&appVersion= 1.22"; 
         } catch (UnsupportedEncodingException e) { 
          e.printStackTrace(); 
         } 

         new Mytask().execute(url, params); 

        } 
        } 


      })); 

     } 


     class Mytask extends AsyncTask<String, Void, String> { 
      // Runs in UI before background thread is called 
      @Override 
      protected void onPreExecute() { 
       setProgressBarVisibility(true); 
       // Do something like display a progress bar 
      } 
      // This is run in a background thread 
      @Override 
      protected String doInBackground(String... params) { 
       return getFromServer(params[0], params[1]); 
      } 
      // This runs in UI when background thread finishes 
      @Override 
      protected void onPostExecute(String result) { 
       try { 
        checkLogin(result); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 

      public String getFromServer(String connectionString, String params) { 
       String response = ""; 
       try { 
        // android.os.Debug.waitForDebugger(); 
        URL url = new URL(connectionString); 
        HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
        //con.setConnectTimeout(100 * 1000); //10 Seconds 
        con.setRequestMethod("POST"); 
        con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
        con.setRequestProperty("Content-Length", "" + Integer.toString(params.getBytes().length)); 
        con.setRequestProperty("Content-Language", "en-US"); 
        con.setUseCaches(false); 
        con.setDoInput(true); 
        con.setDoOutput(true); 
        DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
        wr.writeBytes(params); 
        wr.flush(); 
        wr.close(); 
        InputStream is = con.getInputStream(); 
        response = read(is); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 
        return response; 
       } 
      } 
      private String read(InputStream in) { 
       BufferedReader reader; 
       StringBuilder response = new StringBuilder(); 
       try { 
        reader = new BufferedReader(new InputStreamReader(in)); 
        String line; 
        while ((line = reader.readLine()) != null) { 
         response.append(line); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } finally { 
        return response.toString(); 
       } 
      } 
     } 
    } 
+0

ネットワークデータ伝送にはvolleyを使用します。実装するのが簡単で、再試行の設定を –

+0

'あなたはユーザー名とパスワードがurl' ????????????? – greenapps

答えて

0
try { 
    HttpURLConnection.setFollowRedirects(false); 
    HttpURLConnection con = (HttpURLConnection) new 

    URL(url).openConnection(); 
    con.setRequestMethod("HEAD"); 


    con.setConnectTimeout(5000); //set timeout to 5 seconds 

    return (con.getResponseCode() == HttpURLConnection.HTTP_OK); 

    } catch (java.net.SocketTimeoutException e) { 
    return false; 
} catch (java.io.IOException e) { 
    return false; 

}

+0

volleyライブラリを使用しようとします。 –

0

あなたは、接続を増加し、タイムアウト時間を読み取ることができます。

con.setConnectTimeout(connectiontimeout); 
con.setReadTimeout(readtimeout); 

あなたが使用することができます[改造]あなたの現在のコードの場合http://square.github.io/retrofit/

、このサーバの応答があり、 { "はuserId":0、 "userNameに":ヌル、 "名前":ヌル、「パスワード"null"、 "role":0、 "email":null、 "mobile":null、 "department":null、 "selectedMainGroup":null)

関連する問題