使用Google登录时从db获取数据

时间:2018-03-23 07:31:11

标签: java php android mysql json

所有优秀的开发者,我不是,因为我发布了这个问题; - )

我有一个包含待办事项列表的网站,您可以登录Google。现在我想制作一个Android应用程序来访问我网站上的数据库。我已登录Google部分正确并从该登录活动中切换到活动(通过意图,我知道我是如何正确登录的,导致意图仅在登录时启动)显示我的待办事项列表。这就是我被困的地方。我似乎无法从数据库中获取数据,即使我已登录。我在网上搜索了一下(观看了几个小时关于该主题的YouTube视频,还搜索了StackOverflow,互联网一般和谷歌开发者页面),但没有结果。我猜我必须将登记活动中的令牌传递给另一个,但除此之外,我只是不知道,我希望你们中的某个人可以指出我在右边方向。额外信息:站点用PHP编写,PDO用于DB函数和MySQL DB。我还设法在网站上获得JSON输出。在Android应用程序中,我也使用Volley,它是用Java编写的(不是Kotlin)。我非常感谢您的帮助,如果您需要更多信息(或者可能是代码的一部分),请务必询问。

此致

克里斯托弗

编辑:特此请求的代码: LoginActivity:

package package_name;

some imports...

public class LoginActivity extends AppCompatActivity {

private static final String TAG = "Scorpio To Do Login: ";
GoogleSignInOptions gso;
GoogleSignInClient mGoogleSignInClient;
SignInButton signInButton;
private int RC_SIGN_IN = 6;
private static final String URL_DATA = "https://some.url.be";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    // Configure sign-in to request the user's ID, email address, and basic
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
    gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.server_client_id))
            .requestEmail()
            .build();

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
}

@Override
protected void onStart() {
    super.onStart();

    // Check for existing Google Sign In account, if the user is already signed in
    // the GoogleSignInAccount will be non-null.
    GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
    updateUI(account);
}

private void updateUI(GoogleSignInAccount account) {
    Log.w(TAG, "account = " + account);
    if(account == null){
        // Set the dimensions of the sign-in button.
        signInButton = findViewById(R.id.sign_in_button);
        signInButton.setSize(SignInButton.SIZE_WIDE);

        signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                signIn();
            }
        });

        signInButton.setVisibility(View.VISIBLE);
    } else {
        Context context = LoginActivity.this;

        /* This is the class that we want to start (and open) when the button is clicked. */
        Class destinationActivity = TaskActivity.class;

        /*
        * Here, we create the Intent that will start the Activity we specified above in
        * the destinationActivity variable. The constructor for an Intent also requires a
        * context, which we stored in the variable named "context".
        */
        Intent startChildActivityIntent = new Intent(context, destinationActivity);

        /*
        * Once the Intent has been created, we can use Activity's method, "startActivity"
        * to start the ChildActivity.
        */
        startActivity(startChildActivityIntent);
    }
}

private void signIn() {
    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        // The Task returned from this call is always completed, no need to attach
        // a listener.
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    }
}

private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
    try {
        GoogleSignInAccount account = completedTask.getResult(ApiException.class);
        String idToken = account.getIdToken();
        Log.d("Token: ", idToken);

        // Signed in successfully, show authenticated UI.
        updateUI(account);
    } catch (ApiException e) {
        // The ApiException status code indicates the detailed failure reason.
        // Please refer to the GoogleSignInStatusCodes class reference for more information.
        Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
        updateUI(null);
    }
}
}

TaskActivity:

package package_name;

some imports...

public class TaskActivity extends AppCompatActivity {

private static final String URL_DATA = "https://some.url.be";
private RecyclerView recyclerView;
private RecyclerView.Adapter scorpioAdapter;
private List<ListItem> listItems;
String JSON_STRING;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_task);

    recyclerView = findViewById(R.id.rv);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    listItems = new ArrayList<>();
}

/*REAL DATA*/
/*try instead of loadRecyclerViewData*/
public void getJSON(View view){

    new BackgroundTask().execute();
}
/*end try*/

private void loadRecyclerViewData() {
    final ProgressDialog progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Loading data...");
    progressDialog.show();

    StringRequest stringRequest = new StringRequest(Request.Method.GET,
            URL_DATA,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {
                    progressDialog.dismiss();
                    try {
                        JSONArray jsonArray = new JSONArray(s);

                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject o = jsonArray.getJSONObject(i);
                            int id = o.getInt("id");
                            String name = o.getString("name");
                            int done = o.getInt("done");
                            String reminderDate = o.getString("reminderdate");
                            String reminderTime = o.getString("remindertime");

                            ListItem item = new ListItem(id, name, done, reminderDate, reminderTime);

                            listItems.add(item);
                        }

                        scorpioAdapter = new ScorpioAdapter(listItems, getApplicationContext());

                        recyclerView.setAdapter(scorpioAdapter);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    Toast.makeText(getApplicationContext(), volleyError.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
    );

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}
/*END REAL DATA*/

/* things I tried*/
class BackgroundTask extends AsyncTask<Void, Void, String> {
    String json_url;

    @Override
    protected void onPreExecute() {
        json_url = "https://some.url.be";
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(String result) {
        Log.i("Scorpio To Do: ", result);
        TextView name = (TextView) findViewById(R.id.name);
        name.setText(result);
    }

    @Override
    protected String doInBackground(Void... voids) {
        try {
            URL url = new URL(json_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder stringBuilder = new StringBuilder();
            while ((JSON_STRING = bufferedReader.readLine()) != null){
                stringBuilder.append(JSON_STRING + "\n");
            }

            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();

            return stringBuilder.toString().trim();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
}
/*end try*/
}

0 个答案:

没有答案