java — Android volley получает (ЛЮБЫЕ) данные пользователя с сервера после входа в систему

В настоящее время я создаю приложение для Android, используя Android Volley для решения сетевых задач. Сейчас я не уверен, как я могу получить пользовательские данные с сервера после входа в систему. Единственный способ заставить его работать — мне нужно указать свое имя пользователя в URL, например Username=abc, Ниже мой код Java.

(Основной) Профиль Fragment.java

public class ProfileFragment extends Fragment implements View.OnClickListener{

ProgressDialog dialog;

public ProfileFragment() {
// Required empty public constructor
}

public static final String JSON_URL = "http://192.168.1.6/profile.php?Username=abc";

private ListView listView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment

dialog = new ProgressDialog(getActivity());
dialog.setMessage("Loading....");
dialog.show();

View rootView = inflater.inflate(R.layout.activity_listview, container, false);

listView = (ListView) rootView.findViewById(R.id.listView);

sendRequest();

return rootView;

}

private void sendRequest(){

StringRequest stringRequest = new StringRequest(Request.Method.GET, JSON_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
showJSON(response);
dialog.dismiss();

}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity().getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG).show();
}
});

RequestQueue requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
requestQueue.add(stringRequest);
}

private void showJSON(String json){
Profile_Details pj = new Profile_Details(json);
pj.parseJSON();
profile_details cl = new profile_details(getActivity(), profile_details.names, profile_details.date_of_birth,  profile_details.street_add, profile_details.postal_code, profile_details.city, profile_details.state, profile_details.country);
listView.setAdapter(cl);
}

@Override
public void onClick(View v) {
sendRequest();
}

}

profile.php

<?php

define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DB','users');

$Username = $_GET["Username"];

$mysqli = mysqli_connect(HOST,USER,PASS,DB);

$stmt = $mysqli->prepare ("SELECT Name, Date_of_Birth,
Street_Add, Postal_Code, City, State, Country
FROM personal_details INNER JOIN user_details ON
user_details.User_ID = personal_details.User_ID
WHERE Username=?");

$stmt->bind_param('s', $Username);
$stmt->execute();
/* bind variables to prepared statement */
$stmt->bind_result($Name, $Date_of_Birth,
$Street_Add, $Postal_Code, $City, $State, $Country);
$rows = array();
/* fetch values */

while($stmt->fetch()) {
array_push($rows, array('Name'=>$Name,
'Date_of_Birth'=>$Date_of_Birth,
'Street_Add'=>$Street_Add, 'Postal_Code'=>$Postal_Code,
'City'=>$City, 'State'=>$State,
'Country'=>$Country));
}

/* close statement */
$stmt->close();

/* close connection */
$mysqli->close();
echo json_encode(array("result"=>$rows));

?>

Дополнительная информация. Я создал personal details таблица, которая связана с user details Таблица. Я думаю, что связующая часть в порядке. Ниже мой ответ JSON.

JSON

{
"result": [{
"Name": "John",
"Date_of_Birth": "1995-05-09",
"Street_Add": "abc street",
"Postal_Code": "12345",
"City": "def",
"State": "ghi",
"Country": "jkl"}]
}

Итак, как мне настроить Java-код, чтобы после входа в систему я мог прямо отображать профиль пользователя, для которого мне не нужно указывать имя пользователя в конце URL,

Новое обновление!
Я получил ошибку ссылки на нулевой объект

FATAL EXCEPTION: main
Process: com.androidnewlearner, PID: 2885
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.HashMap com.androidnewlearner.content.SessionManager.getUserDetails()' on a null object reference
at com.androidnewlearner.mainactivity.ProfileFragment.sendRequest(ProfileFragment.java:84)
at com.androidnewlearner.mainactivity.ProfileFragment.onCreateView(ProfileFragment.java:74)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Вот мой SessionManager Java-файл. Я копирую только строку, на которую указывает ошибка.

SessionManager.java

public HashMap<String, String> getUserDetails(){
// Use hashmap to store user credentials
HashMap<String, String> user = new HashMap<String, String>();

// User name
user.put(KEY_USERNAME, pref.getString(KEY_USERNAME, null));

// User password
user.put(KEY_PASSWORD, pref.getString(KEY_PASSWORD, null));

// return user
return user;
}

Обновлен профиль Fragment.java

public class ProfileFragment extends Fragment implements View.OnClickListener{

ProgressDialog dialog;
String url;

SessionManager session;
private String Username;
private String Acc_Pass;
SharedPreferences shared;

public ProfileFragment() {
// Required empty public constructor
}

private ListView listView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment

dialog = new ProgressDialog(getActivity());
dialog.setMessage("Loading....");
dialog.show();

View rootView = inflater.inflate(R.layout.activity_listview, container, false);
//buttonGet = (Button) rootView.findViewById(R.id.buttonGet);
//buttonGet.setOnClickListener(this);

listView = (ListView) rootView.findViewById(R.id.listView);

sendRequest(Username, Acc_Pass);  <------Here is the error
shared= getActivity().getSharedPreferences("Mypref", Context.MODE_PRIVATE);

return rootView;

//return inflater.inflate(R.layout.fragment_profile, container, false);
}

private void sendRequest(String Username, String Acc_Pass){

HashMap<String, String> user = session.getUserDetails();  <------Here is the error
Username = user.get(SessionManager.KEY_USERNAME);
Acc_Pass = user.get(SessionManager.KEY_PASSWORD);

RequestQueue requestQueue = VolleyController.getInstance(getActivity().getApplicationContext()).getRequestQueue();

String url = "http://192.168.1.6/json_dri_details2.php?Username="+Username+"&Acc_Pass="+Acc_Pass+"";

url = url.replaceAll(" ", "%20");
try {
URL sourceUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
Log.i("Getting url info",""+url);

StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
showJSON(response);
dialog.dismiss();

}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity().getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG).show();
dialog.dismiss();
}
});

requestQueue.add(stringRequest);
}

private void showJSON(String json){
Dri_Details pj = new Dri_Details(json);
pj.parseJSON();
profile_details cl = new profile_details(getActivity(), profile_details.names, profile_details.date_of_birth,  profile_details.street_add, profile_details.postal_code, profile_details.city, profile_details.state, profile_details.country);
listView.setAdapter(cl);
}

@Override
public void onClick(View v) {
sendRequest(Username, Acc_Pass);
}

}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector