私はプログラミングとAndroidを初めて使い始めました。これはアプリを初めてプログラミングしようとしましたが、すでにログインに悩まされています。ログインはサーバーに接続する必要があり、取得リクエストの助けを借りて、ログインデータ(ユーザー名)を確認するために使用できるjsonデータを取得します。アプリの使用を許可されているユーザーは既にデータベースに入っています。シンプルになっているはずです。このフォーラムでは、HTTPClient
などでしか解決策を見つけることができませんでしたが、それ以上はHTTPURLConnection
とは機能しません。私はLoginActivityテンプレートを使用しましたAsyncTaskのRESTによる単純なHTTPログイン
これは私のコードです(私はJSONデータを使う経験もありません)。これが私たちのJSONデータの構造です:
{
"id": "1234",
"firstName": "xx",
"lastName": "xy",
"fullName": "xx xy"
}
public class UserLoginTask extends AsyncTask<String, Void, Boolean> {
private final String mEmail;
private final String mPassword;
UserLoginTask(String email, String password) {
mEmail = email;
mPassword = password;
}
@Override
protected Boolean doInBackground(String... params) {
final String REQUEST_METHOD = "GET";
final int READ_TIMEOUT = 15000;
final int CONNECTION_TIMEOUT = 15000;
// attempt authentication against a network service.
//InputStream is;
URL url = null;
try {
String username = params[0];
String password = params[1];
String inputLine;
String result;
url = new URL("URL//");
//Connection with database
urlConnection=(HttpURLConnection) url.openConnection();
//Connect with database
//urlConnection.connect();
//Open stream;
//is=urlConnection.getInputStream();
//Set methods and timeouts
urlConnection.setRequestMethod(REQUEST_METHOD);
urlConnection.setReadTimeout(READ_TIMEOUT);
urlConnection.setConnectTimeout(CONNECTION_TIMEOUT);
//Connect to our URL
urlConnection.connect();
//TODO
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
//Create a new InputStreamReader
InputStreamReader streamReader = new
InputStreamReader(urlConnection.getInputStream());
//Create a new buffered reader and String Builder
BufferedReader reader = new BufferedReader(streamReader);
StringBuilder stringBuilder = new StringBuilder();
//Check if the line we are reading is not null
while((inputLine = reader.readLine()) != null){
stringBuilder.append(inputLine);
}
//Close our InputStream and Buffered reader
reader.close();
streamReader.close();
//Set our result equal to our stringBuilder
result = stringBuilder.toString();
//Proceed in function of status code response
int status = urlConnection.getResponseCode();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
/*for (String credential : DUMMY_CREDENTIALS) {
String[] pieces = credential.split(":");
if (pieces[0].equals(mEmail)) {
// Account exists, return true if the password matches.
return pieces[1].equals(mPassword);
}
}
// TODO: register the new account here.
return true;*/
}
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
showProgress(false);
if (success) {
finish();
} else {
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
私は、HTTPサービスクラスでこれを持っている: 私は私のクラスのHTTPServiceでこれらのメソッドを持っている:どのように私はこれを使用することができますか?
プライベートHttpURLConnection setUpConnection(String url、Credentials credentials)throws IOException { URL reqUrl =新しいURL(url); HttpURLConnection urlConnection =(HttpURLConnection)reqUrl.openConnection();
if (credentials != null && !credentials.getPassword().isEmpty() && !credentials.getUsername().isEmpty()) {
urlConnection.setRequestProperty("Authorization", createBasicAuthString(credentials.getUsername(), credentials.getPassword()));
}
return urlConnection;
}
/**
* Creates the String for the Authorization Header
*
* @param user
* @param password
* @return
*/
private String createBasicAuthString(String user, String password) {
String notEncoded = user + ":" + password;
String encodedAuth = Base64.encodeToString(notEncoded.getBytes(), Base64.DEFAULT);
return "Basic " + encodedAuth;
}
上記のコードを、その文字列を
、このようにあなたのJSONデータを解析し、doInBackground()メソッドでは代わりにブール成功変数の戻り応答文字列と解析url =新しいURL( "URL //"); '???通常のURLを投稿してください。 – greenapps
'urlConnection.setRequestMethod(" GET ");'すでにリクエストメソッドを設定しています。それを二度はしないでください。 – greenapps
'urlConnection.setDoInput(true);'。それはあなたが.connect()ステートメントの前に行うべきことです。 – greenapps