Я хочу загрузить данные в Edittext фрагментов со значением, сохраненным в sharedpreference, но данные не были загружены

package in.co.mdabba.m_dabbawala;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;public class Fragment_MyProfile extends Fragment {public EditText Firstname,Lastname,Phoneno;@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_myprofile, container, false);
run();
return view;
}

public void run(){
SharedPreferences sharedPreferences = getActivity().getSharedPreferences("logininfo", Context.MODE_PRIVATE);
String emailid = sharedPreferences.getString("emailid","");
Firstname =(EditText) getView().findViewById(R.id.firstname);
Lastname = (EditText) getView().findViewById(R.id.lastname);
Phoneno = (EditText)getView().findViewById(R.id.phoneno);
String b1url =  "https://e705bb27.ngrok.io/1/b1.php?emailid="+emailid;
StringRequest stringRequest = new StringRequest(Request.Method.GET, b1url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try{
JSONObject jsonObject = new JSONObject(response);
JSONArray result = jsonObject.getJSONArray("result");
JSONObject Data = result.getJSONObject(0);
String f_name = Data.getString("First_name");
String l_name =Data.getString("Last_name");
String phone_no = Data.getString("Phone_no");
Firstname.setText(f_name);
Lastname.setText(l_name);
Phoneno.setText(phone_no);
} catch (JSONException e) {
e.printStackTrace();
}

}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity(),"Something went wrong try again later!!!",Toast.LENGTH_LONG).show();
error.printStackTrace();
}
});
mysingleton.getInstance(getActivity()).addtoRequest(stringRequest);
}
}

Я хочу загрузить данные пользователя формы mysql после входа в систему, чтобы я использовал sharedpreferences для хранения адреса электронной почты, который будет использоваться для выполнения php-запроса и загрузки данных в Edittext, но после входа в систему мое приложение вылетает, и я использую библиотеку залпов для получения данные.LogCat

Fragment_myproflie.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/lightgrey"android:focusable="true"android:focusableInTouchMode="true"android:orientation="vertical"><TextView
android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:text="Edit Profile"android:textSize="22sp"android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"android:background="@color/white"android:orientation="vertical">
<TextView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:text="First Name:"android:textSize="12sp" />
<EditText
android:id="@+id/firstname"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="8dp"android:text="dd"android:textColor="#000000"/>
<TextView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:text="Last Name:"android:textSize="12sp" />
<EditText
android:id="@+id/lastname"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="8dp"android:layout_marginLeft="8dp"android:layout_marginRight="8dp"android:text="I"android:textColor="#000000"/>
<TextView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:text="Phone no:"android:textSize="12sp" />
<EditText
android:id="@+id/phoneno"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="8dp"android:layout_marginLeft="8dp"android:layout_marginRight="8dp"android:text="lv"android:textColor="#000000"/>
<Button
android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="13dp"android:background="#000080"android:text="@string/UpdateDetails"android:textColor="#FFFFFF"android:textStyle="bold" />
</LinearLayout>

</ScrollView>

0

Решение

Я думаю, что вы можете получить эту запись, поэтому перед использованием setText убедитесь, что значения не равны NULL и значения, которые вы получаете, не совпадают, т.е.

 {"result":[{"Firstname":null,"Lastname":null,"Phoneno":null}]}

String f_name = Data.getString("First_name");//it should be Firstname
String l_name =Data.getString("Last_name");//it should be Lastname
String phone_no = Data.getString("Phone_no");//it should be Phoneno

if(f_name!=null){
Firstname.setText(f_name);
}
if(l_name!=null){
Lastname.setText(l_name);
} if (phone_no!=null){
Phoneno.setText(phone_no);
}
0

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

В тот момент, когда вы вызываете getView (), вы еще не установили View, передаете представление в качестве аргумента методу run и используйте это представление вместо getView ().

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_myprofile, container, false);
run(view);
return view;
}
public void run(View view){
SharedPreferences sharedPreferences = getActivity().getSharedPreferences("logininfo", Context.MODE_PRIVATE);
String emailid = sharedPreferences.getString("emailid","");
Firstname =(EditText) view.findViewById(R.id.firstname);
}
1

Наверное, getView() является нулем, который вы используете в run() метод.

Firstname =(EditText) getView().findViewById(R.id.firstname);
Lastname = (EditText) getView().findViewById(R.id.lastname);
Phoneno = (EditText)getView().findViewById(R.id.phoneno);

сделать глобальное поле, View view и в вашем onCreateView() метод, присвой свой взгляд на этот глобальный view и использовать его позже для привязки ваших взглядов, как

Firstname =(EditText) view.findViewById(R.id.firstname);
0
По вопросам рекламы [email protected]